VBScript调用dsa.msc报错:系统找不到指定文件(HTA环境问题)
解决HTA中VBScript无法定位dsa.msc的问题
问题根源
64位Windows系统里,32位进程会触发文件系统重定向机制:当32位程序访问C:\Windows\System32时,系统会自动把请求转到C:\Windows\SysWOW64目录。而dsa.msc是64位专属的管理单元,只存在于System32中,SysWOW64里没有对应文件,所以32位的HTA调用时会提示找不到文件。
而单独运行的VBS脚本,在64位系统默认会用64位的WScript.exe执行,不会触发重定向,因此能正常找到dsa.msc。
两种可行解决办法
方法1:用Sysnative路径绕过重定向
64位系统提供了Sysnative虚拟路径,32位程序通过它可以直接访问64位的System32目录。把代码里的路径改成:
objShell.Run "C:\Windows\Sysnative\dsa.msc", 1, False
方法2:强制以64位模式运行HTA
- 右键HTA文件 → 属性 → 兼容性 → 勾选「以管理员身份运行此程序」(如果需要AD操作权限的话),再点击「更改所有用户的设置」
- 或者直接用64位的mshta.exe启动HTA,命令行执行:
C:\Windows\System32\mshta.exe "你的HTA文件路径.hta"
修正后的完整HTA脚本示例
<script language="VBScript"> Sub LAUNCH_WEBSITE (choice) Dim objShell, webPage Set objShell=CreateObject("WScript.Shell") webPage = "" If (choice = 1) Then webPage = "https://" ElseIf (choice = 2) Then webPage = "https://" ElseIf (choice = 3) Then ' 用Sysnative路径绕过32位重定向 objShell.Run "C:\Windows\Sysnative\dsa.msc", 1, False End If ' 避免空webPage触发无效执行 If webPage <> "" Then objShell.Run webPage End If End Sub </script>
补充:原代码中当choice=3时,会在启动dsa.msc后执行空的webPage,可能导致不必要的弹窗,建议加上判断过滤这种情况。
内容的提问来源于stack exchange,提问作者zwirth
相关产品推荐
相关产品推荐

