我对批处理文件相当新,尤其是在我被要求这样做的情况下。
我们在网络上有很多运行“.kix”文件的旧批处理文件,它们已经运行了很多年。我的公司虽然正在转向Windows 10,但由于Windows 10增强的安全性,很多这些旧的批处理文件都无法运行。
我环顾四周并为此找到了补救办法,但我遇到了麻烦。我有一个运行“.msi”文件的批处理文件。我对.kix文件的修复是:
Set "kixCommand=\\abc123\Scripts\KIX\kix32.exe" *(abc123 is the network server name)*
Set "kixFile=\\abc123\Scripts\Apps\My Program\MyProgram.kix"
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "C:\ICS_Tools\Temp\getadmin.vbs"
echo UAC.ShellExecute "cmd.exe", "/c %kixCommand% %kixFile%", "", "runas", 1 >> "C:\ICS_Tools\Temp\getadmin.vbs"
"C:\ICS_Tools\Temp\getadmin.vbs"
del "C:\ICS_Tools\Temp\getadmin.vbs"
exit /B
批处理创建一个本地vbs脚本,据说用管理员权限运行它,然后删除它。
我尝试对.msi文件使用相同的方法。 .vbs文件如下所示:
Set UAC = CreateObject("Shell.Application")
UAC.ShellExecute "msiexec.exe /i \\abc123\Scripts\Apps\My Program2\setup.msi", "", "runas", 1
出于某种原因,它说它无法找到命令(见附图)。
我真的很感谢一些专家的帮助。我尝试过使用引号(因为文件夹名称“My Program2”中的空格),但似乎没有任何效果。
答案 0 :(得分:1)
您的新代码将两个参数合并到可执行路径中。确实没有名为msiexec.exe /i \\abc123\Scripts\Apps\My Program2\setup.msi
的可执行文件,因此预计会失败。
相反,请尝试:
UAC.ShellExecute "msiexec.exe", "/i", "\\abc123\Scripts\Apps\My Program2\setup.msi", "", "runas", 1
您的原始代码(以及新代码的尾随部分)是正确的。