Powershell 使用自定义 Wix 标志命令行 arg 卸载应用程序

Powershell uninstall app with custom Wix flag command line arg

我创建了一个自定义 Wix 标志命令行参数 (FLAG = "remove") 以在卸载过程中绕过一些自定义消息框。对于 windows 批处理命令,命令如下所示:

AppInstaller.exe /quiet /uninstall FLAG="remove"

我想将此命令转换为在 Powershell 中工作,但语法有问题。 我试过以下方法:

Start-Process ./AppInstaller.exe /s FLAG="remove" -Wait
Start-Process ./ProductivityAppInstaller.exe -ArgumentList /s FLAG="remove" -Wait

Powershell 似乎无法识别我的自定义 Wix 参数。我收到错误 "A positional parameter cannot be found that accepts argument 'FLAG=remove'"。

您对使用 -ArgumentList 的想法是正确的。但是,您需要将参数括在双引号中,并用反引号转义任何需要传递给可执行文件的双引号文字。

Start-Process -FilePath "./AppInstaller.exe" -ArgumentList "/s FLAG=`"remove`"" -Wait

-ArgumentList 期望将字符串数组传递给它。在幕后,PowerShell 通过 space (</code>) 连接这些数组元素。如果您为参数提供的值是单个字符串,并且 .exe 参数由 space 分隔,您将获得相同的结果。由于 PowerShell 在检测到双引号对时会尝试执行字符串扩展,因此您需要指示 PowerShell 在不需要时不要执行此操作。通过转义双引号,PowerShell 将跳过该转义双引号的扩展。</p> <p>另一种方法是创建一个参数数组。然后将数组传递给 <code>-ArgumentList 参数。您仍然需要通过用单引号将参数括起来或进行反引号转义来将双引号作为字符串的一部分包含在字面上。