我想在WiX中调用OpenOffice的命令行程序.为此,我创建了一个自定义操作,如下所示:
<CustomAction Id="ca_RunOpenOfficeProgram" Return="check" Directory="TARGETDIR" ExeCommand="cmd.exe /K "C:\OpenOffice.org3\program\unopgk.com list --shared"" />
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属性更改WixShellExecTarget为cmd.exe /K "C:\OpenOffice.org3\program\unopgk.com list --shared",它应该工作.
找到了我的问题的解决方案:
1)正如我在对汤姆斯帖子的回答中所写的那样,我在命令行中输入了拼写错误......愚蠢。
2) 有关命令行调用的引号被放错了位置(Toms 回答)
3) 我发现只有在使用管理权限运行命令行时,才会执行带有“shared”参数的“unopkg.com”运行。我认为我的 CustomAction 中的属性 'impersonated="yes"' 就足够了,但它没有帮助。我想我必须深入研究有关 UAC 的 WiX 文档。
还要感谢拉尔夫。我没有尝试他的解决方案,但你可以尝试一下。