首页 > 解决方案 > 带有自定义 Wix 标志命令行参数的 Powershell 卸载应用程序

问题描述

我创建了一个自定义 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'的位置参数”。

标签: powershellcmduninstallation

解决方案


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

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

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

另一种方法是创建一个参数数组。然后将数组传递给-ArgumentList参数。您仍然必须通过用单引号包围参数或进行反引号转义来将双引号作为字符串的一部分包含在内。


推荐阅读