NSIS 在卸载部分调用 PowerShell
NSIS Call PowerShell in Uninstall Section
我正在为我们将在大约一个月内获得的新 VPN 创建一个 NSIS 安装程序。我让它调用 PowerShell 脚本来毫无问题地创建连接。但是,删除 VPN 连接并不能使用相同的方法。下面是我所有的卸载代码
Section Uninstall
ExpandEnvStrings [=10=] "%COMSPEC%"
ExecShell "" '"[=10=]"' "/C powershell -ExecutionPolicy Bypass -WindowStyle Hidden -File .\DeleteVPNConnection.ps1 -connectionName ${VPN_NAME} " SW_HIDE
Delete "$INSTDIR\uninst.exe"
Delete "$INSTDIR\CreateVPNConnection.ps1"
Delete "$INSTDIR\DeleteVPNConnection.ps1"
RMDir /r "$INSTDIR"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
SetAutoClose true
SectionEnd
有没有人知道为什么卸载脚本不起作用(我也尝试删除 connectionName 参数,同样的问题)。
您的代码有两个问题:
- 您正在指定一个相对的 .ps 文件路径。
ExecShell
不会等待,因此 .ps 文件可能会过早删除。
如果您使用的是 NSIS 3.02,则可以使用 ExecShellWait
:
ExpandEnvStrings [=10=] "%COMSPEC%"
ExecShellWait "" '"[=10=]"' '/C powershell -ExecutionPolicy Bypass -WindowStyle Hidden -File "$InstDir\DeleteVPNConnection.ps1" -connectionName ${VPN_NAME}' SW_HIDE
如果您使用的是较旧的 NSIS 版本,则必须使用 ExecWait
(不隐藏控制台 window)或 nsExec plug-in.
我正在为我们将在大约一个月内获得的新 VPN 创建一个 NSIS 安装程序。我让它调用 PowerShell 脚本来毫无问题地创建连接。但是,删除 VPN 连接并不能使用相同的方法。下面是我所有的卸载代码
Section Uninstall
ExpandEnvStrings [=10=] "%COMSPEC%"
ExecShell "" '"[=10=]"' "/C powershell -ExecutionPolicy Bypass -WindowStyle Hidden -File .\DeleteVPNConnection.ps1 -connectionName ${VPN_NAME} " SW_HIDE
Delete "$INSTDIR\uninst.exe"
Delete "$INSTDIR\CreateVPNConnection.ps1"
Delete "$INSTDIR\DeleteVPNConnection.ps1"
RMDir /r "$INSTDIR"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
SetAutoClose true
SectionEnd
有没有人知道为什么卸载脚本不起作用(我也尝试删除 connectionName 参数,同样的问题)。
您的代码有两个问题:
- 您正在指定一个相对的 .ps 文件路径。
ExecShell
不会等待,因此 .ps 文件可能会过早删除。
如果您使用的是 NSIS 3.02,则可以使用 ExecShellWait
:
ExpandEnvStrings [=10=] "%COMSPEC%"
ExecShellWait "" '"[=10=]"' '/C powershell -ExecutionPolicy Bypass -WindowStyle Hidden -File "$InstDir\DeleteVPNConnection.ps1" -connectionName ${VPN_NAME}' SW_HIDE
如果您使用的是较旧的 NSIS 版本,则必须使用 ExecWait
(不隐藏控制台 window)或 nsExec plug-in.