具有自定义Wix标志命令行arg的Powershell卸载应用

时间:2019-06-05 18:14:41

标签: powershell cmd uninstall

我创建了一个自定义的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参数。我收到错误消息“找不到一个接受参数'FLAG = remove'的位置参数”。

1 个答案:

答案 0 :(得分:2)

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

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

-ArgumentList期望将字符串数组传递给它。在幕后,PowerShell通过空格()连接这些数组元素。如果为参数提供一个值,该值是单个字符串,.exe参数之间用空格分隔,则将获得相同的结果。由于PowerShell会在检测到双引号对时尝试执行字符串扩展,因此您需要指示PowerShell在不受欢迎的情况下不要执行此操作。通过转义双引号,PowerShell将跳过该转义的双引号的扩展。

另一种替代方法是创建参数数组。然后将数组传递到-ArgumentList参数中。您仍然必须通过用单引号将参数引起来或进行反引号转义来将双引号从字面上包括为字符串的一部分。