Wix的CustomAction调用PowerShell脚本时传递额外参数失败如何解决
问题定位
你的配置存在两个核心问题导致参数解析失败:
- 路径转义冲突:
[INSTALLFOLDER]属性默认携带末尾反斜杠,会转义脚本路径后的闭合双引号,直接打乱整个命令行的参数结构。例如当INSTALLFOLDER取值为C:\Program Files\MyApp\时,你写的"[INSTALLFOLDER]ReplaceConnectionString.ps1"会被实际解析为"C:\Program Files\MyApp\"ReplaceConnectionString.ps1",末尾的反斜杠把后续双引号转义为普通字符,直接破坏了引号闭合逻辑。 - 未做路径尾部特殊处理:Wix的属性引用没有做去末尾分隔符处理,叠加PowerShell的参数解析规则后,就会出现你遇到的参数传递失效问题。
修复方案
仅需要修改SetProperty节点中脚本路径的属性引用,给INSTALLFOLDER后缀加.即可,Wix会自动移除该属性值的末尾反斜杠,避免转义问题。修复后的完整配置如下:
<SetProperty Id="ReplaceConnectionString" Before="ReplaceConnectionString" Sequence="execute" Value=""C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NonInteractive -ExecutionPolicy Bypass -InputFormat None -NoProfile -File "[INSTALLFOLDER.]ReplaceConnectionString.ps1" "MyParam"" /> <CustomAction Id="ReplaceConnectionString" BinaryKey="WixCA" DllEntry="WixQuietExec" Execute="deferred" Return="check" Impersonate="no" /> <InstallExecuteSequence> <Custom Action="ReplaceConnectionString" After="InstallFiles">NOT Installed</Custom> </InstallExecuteSequence>
如果需要传递更多参数,直接在现有参数后按照 "参数值"的格式追加即可。如果需要调试参数解析情况,可以在PowerShell参数后追加 *>> C:\ps_install_log.txt输出执行日志排查问题。
内容的提问来源于stack exchange,提问作者jimbo
相关产品推荐
相关产品推荐

