我需要在安装例程中静默运行命令。
我需要运行的命令如下:
"c:\Program Files (x86)\MPSAuditTool\v1\mrt.exe" /s /v"cmd=silent"
现在我知道的最后一部分导致尝试通过带引号字符的普通exe命令传递它。我的各种谷歌搜索让我尝试使用VBS来实现这一目标。
我的vbs
Public Function runQuiet()
Dim oShell
Set oShell = CreateObject ("WScript.Shell")
oShell.run("cmd.exe c:\Program Files (x86)\MPSAuditTool\v1\mrt.exe /s /v"), 0
Set oShell = Nothing
End Function
我的WiX代码供参考:
<InstallExecuteSequence>
<Custom Action="SilentMRT" After="InstallFinalize" />
</InstallExecuteSequence>
<Binary Id="SilentInstall" SourceFile="E000874\launchquiet.vbs" />
<CustomAction BinaryKey="SilentInstall" VBScriptCall="runQuiet" Id="SilentMRT" Return="check" />
安装程序正常运行但mrt.exe根本不运行。当我删除,0
和oShell=Nothing
行时,会显示cmd提示符,但它不会调用.exe,只会弹出提示符。
如果我使用wScript从cmd运行VBS,它将按预期静默运行exe。
关于我需要在vbs中改变什么的想法?
答案 0 :(得分:0)
日志文件说什么?不要从其他MSI文件中的自定义操作启动MSI安装。技术上不允许两个并发的MSI会话。相反,使用引导程序 - 例如WiX's Burn feature - 一个接一个地运行设置。实施起来并不难,你会省去很多麻烦。 Burn documentation。说真的:它应该解决你所有的问题,并且不需要自定义操作或VBScripts。
在InstallFinalize之后启动另一个具有立即模式自定义操作的MSI(就像您似乎那样)也将失败,因为自定义操作不会以提升的权限运行(静默启动时)。因此,即使之前的MSI会话已在InstallFinalize结束,由于上述其他技术限制(不允许使用两个并发会话对象),它仍然会失败。
对于记录:MSI会话(更改事务)在InstallInitialize和InstallFinalize之间运行 - 只需提及它 - 这是一个很长的故事。升级的自定义操作必须全部放在InstallInitialize和InstallFinalize之间。
修改系统的InstallFinalize之后的所有立即模式自定义操作都是错误的。坦率地说,在InstallFinalize之后根本就没有自定义操作。它们总是在没有高程的情况下运行,并且它们始终没有回滚支持。此处的延迟自定义操作将无法编译。
请不要尝试将自定义操作放在UI序列中 - 这会导致在静默安装安装程序时它永远无法运行。