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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Wix安装程序使用参数执行cmd相关的知识,希望对你有一定的参考价值。

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

我需要运行的命令如下:

"c:Program Files (x86)MPSAuditToolv1mrt.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)MPSAuditToolv1mrt.exe /s /v"), 0 
Set oShell = Nothing
End Function

我的WiX代码供参考:

    <InstallExecuteSequence>
        <Custom Action="SilentMRT" After="InstallFinalize" />
    </InstallExecuteSequence>

<Binary Id="SilentInstall" SourceFile="E000874launchquiet.vbs" />
<CustomAction BinaryKey="SilentInstall" VBScriptCall="runQuiet" Id="SilentMRT" Return="check" />

安装程序正确运行但mrt.exe根本不运行。当我删除,0oShell=Nothing行时,会显示一个cmd提示符,但它不会调用.exe,它只会弹出提示符。

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

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

答案

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

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

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

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

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

以上是关于Wix安装程序使用参数执行cmd的主要内容,如果未能解决你的问题,请参考以下文章

用于多个项目的通用 Wix 安装程序

Android 逆向Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )(代码片段

Wix XmlFile 元素执行得太早

Wix的自定义操作无法调用vb脚本

验证 WIX 安装程序中的输入控件

向 WiX 安装程序添加自定义操作