access vba 中的 Shell cmd 返回错误 5 - 无效的过程调用或参数

问题描述 投票:0回答:3

我已经在多个版本的多个数据库中使用 MS Access 中的 Shell 命令多年了。最近,我收到了这个运行时错误 5 - 我使用多年的 Shell 命令上的过程调用或参数无效。谁能告诉我是否有最近的 Windows 更新或可能的 MS Office 更新导致出现此错误?我目前正在使用 Office 2010 和 Office 2013,并且在多台计算机上的两个版本中都收到相同的错误。我什至尝试创建一个简单的空数据库,然后直接进入 vba 窗口,并在立即窗口中尝试一个简单的 Shell 命令,如下所示:

Shell "C:\Notepad.bat", vbNormalFocus  

Notepad.bat 里面有一个简单的命令:

cmd /C "Notepad.exe"

代码:

Shell "Notepad.exe", vbNormalFocus 

确实有效,但是:

Shell "Cmd.exe", vbNormalFocus 

在我测试的每台机器上仍然给出相同的错误 5 消息。从 Windows 资源管理器运行批处理文件效果很好。非常感谢任何帮助。

vba shell batch-file ms-access cmd
3个回答
3
投票

经过大量调查后,我偶然发现我们的网络软件工程师安装了一款新软件,该软件可以维护我们的 McAfee 保护。上周,有人盲目安装了一款名为“自适应威胁防护”的新应用程序,该应用程序将检查运行 shell 命令(尤其是 CMD 类型)的 MS Office 应用程序。这被设置为自动阻止所有此类命令。我最终得出结论,查看计算机上最近安装或更新的所有内容,并碰巧发现在上周日期范围内安装了一些不同的内容。感谢您迄今为止的帮助和答复。 thx1138v2 提供的答案是我在发帖之前也尝试过的,但我想对于我的第一个问题,我试图将我的帖子保持在最低限度。


1
投票

对于任何偶然发现此问题的人,Windows Defender 也可能是导致此行为的原因。

您需要检查您的安全管理员是否配置了 Windows Defender 的攻击面减少功能(通过 Intune、MEM、GPO...)。

您需要在此处查找的具体规则是 阻止所有 Office 应用程序创建子进程 (

d4f940ab-401b-4efc-aadc-ad5f3c50688a
)。

您可以在 Windows 事件查看器应用程序日志MicrosoftWindowsWindows Defender操作中轻松验证这一点,并查找 ID 1121 的警告事件。

这是屏幕截图(抱歉,是法语):

请注意,仅显示规则的 GUID,而不显示全名(GUID 列表可以在参考中找到)。

或者如果您更喜欢使用 Powershell:

Get-WinEvent -ProviderName "Microsoft-Windows-Windows Defender" | Where-Object { $_.Id -eq '1121' }

0
投票

首先承认您正在使用 Microsoft Office 产品。深呼吸并服用一些镇定剂。

接受您收到的错误消息可能与问题无关。 接受 Windows 可能有偏执设置,这会阻止您执行工作。

综上所述:

  • 就我而言,我能够执行 .bat 文件,但不能执行临时命令。
  • 我设法从 VBA 创建了一个 .bat 文件,但我无法读取
  • 所以我结束了
    • 使用命令创建 .txt 文件,
    • 将其重命名为.bat
    • 执行它,并且
    • 删除它,如下:

      cmd =“将你的命令放在这里”

      将 fso 调暗为对象

      设置 fso = CreateObject("Scripting.FileSystemObject")

      将 oFile 作为对象变暗

      设置 oFile = fso.CreateTextFile("tmp_file.txt")

      oFile.WriteLine cmd

      o文件.关闭

      设置 fso = 无

      设置 oFile = Nothing

      将“tmp_file.txt”命名为“tmp_file.bat”

      Shell“tmp_file.bat”,vbNormalFocus

      杀死“tmp_file.bat”

© www.soinside.com 2019 - 2024. All rights reserved.