7

我想在 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”部分被完全忽略了。

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

4

3 回答 3

5

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

这是示例代码:

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

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

于 2013-07-10T11:58:23.753 回答
4

你确定这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 安装程序对话框中将其显示给用户。这将比让用户看到一个带有闪烁提示必须退出的控制台窗口更好的体验。

于 2013-07-10T14:18:25.697 回答
0

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

1)正如我对汤姆斯帖子的回答中所写,我在命令行中有错字......愚蠢。

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

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

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

于 2013-07-12T07:19:04.910 回答