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

如何在WiX中调用命令行程序,wix,wix3.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;" /> 当然,这个命令是可用的,我可以从

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

<CustomAction Id="ca_RunOpenOfficeProgram" Return="check" Directory="TARGETDIR"  ExeCommand="cmd.exe /K &quot;C:\OpenOffice.org3\program\unopgk.com list --shared&quot;" />
当然,这个命令是可用的,我可以从命令行运行它。但是如果WiX正在调用命令行,它就不起作用了。 同样值得注意的是,“列表-共享”部分完全被忽略了


有人知道这里发生了什么吗?

我建议使用WiX工具集中的

以下是示例代码:

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


将属性
WixShellExecTarget
Value
更改为
cmd.exe/K“C:\OpenOffice.org3\program\unopgk.com列表--shared”
,它应该可以工作。

您确定
cmd.exe/K“C:\OpenOffice.org3\program\unopgk.com列表--shared”
可以工作吗?看起来你把引号放错地方了

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

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

ExeCommand="&quot;C:\OpenOffice.org3\program\unopgk.com&quot; list --shared"
最后,如果上面是所需的唯一命令,并且假设
C:\OpenOffice.org3\program\unopgk.com
是一个控制台应用程序,则将打开一个无用的控制台窗口。这可以通过WiX的自定义操作来避免


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

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

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

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

1) 正如我在给Toms post的回复中所写的,我在命令行中有输入错误。。。愚蠢。

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

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


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

如果我输入错误,该程序名为“unopkg.com”。更正了它,我的自定义操作现在看起来是这样的:
运行MSI时,我收到以下错误消息:“此Windows Installer软件包存在问题。”。作为安装程序一部分运行的程序未按预期完成。联系您的支持人员[…]”检查日志文件。程序的返回值(退出代码)可能很重要。要使用日志记录运行msiexec,请参阅。
ExeCommand="&quot;C:\OpenOffice.org3\program\unopgk.com&quot; list --shared"
cmd /c &quot;C:\OpenOffice.org3\program\unopgk.com&quot; list --shared >path\out.txt