Wix安装程序使用参数执行cmd

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

作为安装例程的一部分,我需要静默运行命令。

我需要运行的命令如下:

"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根本不运行。当我删除,0oShell=Nothing行时,会显示一个cmd提示符,但它不会调用.exe,它只会弹出提示符。

如果我使用wScript从cmd运行VBS,它会按预期静默运行exe。

关于我需要在vbs中改变什么的想法?

vbscript wix windows-installer
1个回答
0
投票

日志文件说什么?不要从其他MSI文件中的自定义操作启动MSI安装。技术上不允许两个并发的MSI会话。相反,使用引导程序(如WiX's Burn feature)一个接一个地运行设置。实施起来并不难,你会省去很多麻烦。 Burn documentation。说真的:它应该解决你所有的问题,并且不需要自定义操作或VBScripts。

在InstallFinalize之后启动另一个具有立即模式自定义操作的MSI(就像您似乎那样)也将失败,因为自定义操作不会以提升的权限运行(当以静默方式启动时)。因此,即使之前的MSI会话已在InstallFinalize结束,由于其他技术限制,它仍然会失败,而不是上面提到的那个(不允许两个并发会话对象)。

对于记录:MSI会话(更改事务)在InstallInitialize和InstallFinalize之间运行 - 只是提到它 - 这是一个很长的故事。必须在InstallInitialize和InstallFinalize之间放置提升的自定义操作。

修改系统的InstallFinalize之后的所有立即模式自定义操作都是错误的。坦率地说,在InstallFinalize之后根本就没有自定义操作。它们总是在没有高程的情况下运行,并且它们始终没有回滚支持。此处的延迟自定义操作将无法编译。

并且请不要尝试将自定义操作放在UI序列中 - 这将导致它在静默安装安装程序时永远不会运行。

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