我有一个可执行文件,需要传递给它的预设参数,因此需要batch file(。bat)。一切都运行良好,直到我认为使用的文件夹路径 [WixBundleLastUsedSource]可以包含空格。
这是EXE文件打包定义:
<ExePackage Id="myexepackage" Compressed="no" Permanent="yes" Cache="no"
After="previousfeature"
SourceFile="$(var.preprocessorvariable)\myexe.bat"
InstallCommand="[WixBundleLastUsedSource]myexe.exe [otherparam]" />
以下是我尝试过的一些测试以及来自它们的日志:
这是工作变体:
应用执行包:myexepackage,action:Install,path:C:\ ProgramData \ Package Cache \ 7AE3BA856B7D415569854BFE32DD3848112B7BFA \ myexe.bat,arguments:'“C:\ ProgramData \ Package Cache \ 7AE3BA856B7D415569854BFE32DD3848112B7BFA \ myexe.bat”C:\ Users \ user \ Desktop \ Install \ myexe.exe otherparamvalue'
以下两个日志来自失败:
应用执行包:myexepackage,action:Install,path:C:\ ProgramData \ Package Cache \ 7AE3BA856B7D415569854BFE32DD3848112B7BFA \ myexe.bat,arguments:'“C:\ ProgramData \ Package Cache \ 7AE3BA856B7D415569854BFE32DD3848112B7BFA \ myexe.bat”“C: \ Users \ user \ Desktop \ Install \ myexe.exe“otherparamvalue'
应用执行包:myexepackage,action:Install,path:C:\ ProgramData \ Package Cache \ 7AE3BA856B7D415569854BFE32DD3848112B7BFA \ myexe.bat,arguments:'“C:\ ProgramData \ Package Cache \ 7AE3BA856B7D415569854BFE32DD3848112B7BFA \ myexe.bat”“C: \ Users \ user \ Desktop \安装new \ myexe.exe“otherparamvalue'
每当我使用"
或%quot;
之类的
<ExePackage Id="myexepackage" Compressed="no" Permanent="yes" Cache="no"
After="previousfeature"
SourceFile="$(var.preprocessorvariable)\myexe.bat"
InstallCommand=""[WixBundleLastUsedSource]myexe.exe"[otherparam]" />
它失败了:
e000:错误0x80070001:进程返回错误:0x1
e000:错误0x80070001:执行EXE包失败 e000:错误0x80070001:无法配置每台计算机的EXE程序包。
是否有解决方案或解决方法?
答案 0 :(得分:0)
InstallCommand
属性应包含传递给exe的参数。它不应该包含.exe本身。
答案 1 :(得分:0)
我遇到了这种情况,因为传入的Wix值以反斜杠结尾。最终导致第二个双引号在安装引擎中的某个位置转义,结果,第一个引号被剥离。例如:
<ExePackage SourceFile="..\bin\MyEXE.exe" Name="MyEXE.exe" InstallCommand=""InstallDir=[INSTALLDIR]" InstallType=MyType" />
当[InstallDir]以反斜杠结尾时,不是两个命令行参数,而是一个,并且删除了第一个“。”修复程序是在第二个“:”之前添加一个空格。
<ExePackage SourceFile="..\bin\MyEXE.exe" Name="MyEXE.exe" InstallCommand=""InstallDir=[INSTALLDIR] " InstallType=MyType" />
不幸的是,某些EXE软件包的尾随空格可能有问题,因此此修补程序可能不适用于所有人。
答案 2 :(得分:0)
我对WiX 3.11.1的经验是,通过 InstallCommand 或 UninstallCommand 提供命令参数时,任何双引号都会引起命令处理器(即cmd)。 exe)失败。在批处理脚本之间传递双引号可能很棘手,更不用说在WiX内以XML进行编码了。可能可以找出正确的反斜杠集或其他转义字符,以放置在每个“”之前。标签,但我决定完全绕开它。
我的解决方案是在执行前使用单引号并修改批处理脚本以将所有单引号替换为双引号。可以使用其他字符。
<ExePackage Id="myexepackage" Compressed="no" Permanent="yes" Cache="no"
After="previousfeature"
SourceFile="$(var.preprocessorvariable)\myexe.bat"
InstallCommand="'[WixBundleLastUsedSource]myexe.exe' [otherparam]" />
myexe.bat
类似于:
Set CommandText=%*
Set CommandText=%CommandText:'="%
Call %CommandText%