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

时间:2013-07-10 09:41:36

标签: 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;" />

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

<InstallExecuteSequence>            
  <Custom Action="ca_RunOpenOfficeProgram" Before="InstallFinalize" />
 </InstallExecuteSequence>

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

Invalid command 'C:\OpenOffice.org3\program\unopkg.com' could not be found.

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

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

3 个答案:

答案 0 :(得分:5)

我建议使用WiX工具集中的ShellExecute custom action

以下是示例代码:

<Property Id="WixShellExecTarget" Value="[#myapplication.exe]" />
<CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />

Value属性WixShellExecTarget更改为cmd.exe /K &quot;C:\OpenOffice.org3\program\unopgk.com list --shared&quot;,它应该有效。

答案 1 :(得分:3)

您确定cmd.exe /K "C:\OpenOffice.org3\program\unopgk.com list --shared"有效吗?看起来你的报价在错误的地方。

并且,您真的希望控制台窗口保持打开状态(/k)吗?用户是否必须在安装继续之前输入更多命令?您可能需要/c。请参阅cmd /?的帮助。

但是,如果只需要一个命令,为什么不直接运行程序呢?

ExeCommand="&quot;C:\OpenOffice.org3\program\unopgk.com&quot; list --shared"

最后,如果以上是唯一需要的命令并且假设C:\OpenOffice.org3\program\unopgk.com是控制台应用程序,则将打开无用的控制台窗口。使用WiX的QtExecCmdLine自定义操作可以避免这种情况。


如果您正在运行程序来收集信息,并且它是一个控制台应用程序,您可以执行以下操作:

cmd /c &quot;C:\OpenOffice.org3\program\unopgk.com&quot; list --shared >path\out.txt

并使用其他自定义操作来读取文件并对其进行决策或在Windows Installer对话框中向用户显示该文件。这将是一个更好的体验,而不是让用户在控制台窗口中闪烁提示他们必须退出。

答案 2 :(得分:0)

找到解决我问题的方法:

1)正如我对Toms帖子的回答中所写,我在命令行输入错误...愚蠢。

2)关于命令行调用的引用被错放(Toms回答)

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

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

相关问题