如何在WiX中调用命令行程序

Mar*_*Ott 6 wix wix3.6

我想在WiX中调用OpenOffice的命令行程序.为此,我创建了一个自定义操作,如下所示:

<CustomAction Id="ca_RunOpenOfficeProgram" Return="check" Directory="TARGETDIR"  ExeCommand="cmd.exe /K &quot;C:\OpenOffice.org3\program\unopgk.com list --shared&quot;" />
Run Code Online (Sandbox Code Playgroud)

自定义操作正在安装执行顺序中运行:

<InstallExecuteSequence>            
  <Custom Action="ca_RunOpenOfficeProgram" Before="InstallFinalize" />
 </InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)

运行生成的MSI文件时,我在命令行中收到以下错误消息:

Invalid command 'C:\OpenOffice.org3\program\unopkg.com' could not be found.
Run Code Online (Sandbox Code Playgroud)

嗯,当然,命令是可用的,我可以从命令行运行它.但是,如果WiX调用命令行,它就无法工作.值得注意的是,"list --shared"这个部分完全被忽略了.

有谁知道这里发生了什么?

小智 5

我建议使用WiX工具集中的ShellExecute自定义操作.

以下是示例代码:

<Property Id="WixShellExecTarget" Value="[#myapplication.exe]" />
<CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />
Run Code Online (Sandbox Code Playgroud)

Value属性更改WixShellExecTargetcmd.exe /K &quot;C:\OpenOffice.org3\program\unopgk.com list --shared&quot;,它应该工作.


Mar*_*Ott 0

找到了我的问题的解决方案:

1)正如我在对汤姆斯帖子的回答中所写的那样,我在命令行中输入了拼写错误......愚蠢。

2) 有关命令行调用的引号被放错了位置(Toms 回答)

3) 我发现只有在使用管理权限运行命令行时,才会执行带有“shared”参数的“unopkg.com”运行。我认为我的 CustomAction 中的属性 'impersonated="yes"' 就足够了,但它没有帮助。我想我必须深入研究有关 UAC 的 WiX 文档。

还要感谢拉尔夫。我没有尝试他的解决方案,但你可以尝试一下。