我已经在多个版本的多个数据库中使用 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 资源管理器运行批处理文件效果很好。非常感谢任何帮助。
经过大量调查后,我偶然发现我们的网络软件工程师安装了一款新软件,该软件可以维护我们的 McAfee 保护。上周,有人盲目安装了一款名为“自适应威胁防护”的新应用程序,该应用程序将检查运行 shell 命令(尤其是 CMD 类型)的 MS Office 应用程序。这被设置为自动阻止所有此类命令。我最终得出结论,查看计算机上最近安装或更新的所有内容,并碰巧发现在上周日期范围内安装了一些不同的内容。感谢您迄今为止的帮助和答复。 thx1138v2 提供的答案是我在发帖之前也尝试过的,但我想对于我的第一个问题,我试图将我的帖子保持在最低限度。
对于任何偶然发现此问题的人,Windows Defender 也可能是导致此行为的原因。
您需要检查您的安全管理员是否配置了 Windows Defender 的攻击面减少功能(通过 Intune、MEM、GPO...)。
您需要在此处查找的具体规则是 阻止所有 Office 应用程序创建子进程 (
d4f940ab-401b-4efc-aadc-ad5f3c50688a
)。
您可以在 Windows 事件查看器、应用程序日志、Microsoft、Windows、Windows Defender 和操作中轻松验证这一点,并查找 ID 1121 的警告事件。
请注意,仅显示规则的 GUID,而不显示全名(GUID 列表可以在参考中找到)。
或者如果您更喜欢使用 Powershell:
Get-WinEvent -ProviderName "Microsoft-Windows-Windows Defender" | Where-Object { $_.Id -eq '1121' }
首先承认您正在使用 Microsoft Office 产品。深呼吸并服用一些镇定剂。
接受您收到的错误消息可能与问题无关。 接受 Windows 可能有偏执设置,这会阻止您执行工作。
综上所述:
删除它,如下:
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”