NSIS在卸载部分调用PowerShell

时间:2018-01-11 22:29:14

标签: powershell nsis uninstall

我正在为我们的新VPN创建一个NSIS安装程序,我们将在一个月内完成。我让它调用PowerShell脚本来创建连接而没有问题。但是,删除VPN连接不能使用相同的方法。以下是我的卸载代码

Section Uninstall
  ExpandEnvStrings $0 "%COMSPEC%"
  ExecShell "" '"$0"' "/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参数,同样的问题)。

1 个答案:

答案 0 :(得分:3)

您的代码存在两个问题:

  • 您正在指定相对的.ps文件路径。
  • t := template.Must(template.New("").Parse(tmpl)) var v interface{} if err := json.Unmarshal(jsonFromClient, &v); err != nil { // handle error } if err := t.Execute(output, v); err != nil { // handle error } 不等待,因此.ps文件可能会过早删除。

如果您使用的是NSIS 3.02,则可以使用ExecShell

ExecShellWait

如果您使用较旧的NSIS版本,则必须使用ExpandEnvStrings $0 "%COMSPEC%" ExecShellWait "" '"$0"' '/C powershell -ExecutionPolicy Bypass -WindowStyle Hidden -File "$InstDir\DeleteVPNConnection.ps1" -connectionName ${VPN_NAME}' SW_HIDE (不隐藏控制台窗口)或nsExec plug-in