【问题标题】:NSIS Call PowerShell in Uninstall SectionNSIS 在卸载部分调用 PowerShell
【发布时间】:2018-06-21 08:37:46
【问题描述】:

我正在为我们的新 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 参数,同样的问题)。

【问题讨论】:

  • 您正在为脚本路径指定.\ExecShell 运行时的当前目录是什么?

标签: powershell nsis uninstallation


【解决方案1】:

您的代码有两个问题:

  • 您正在指定一个相对的 .ps 文件路径。
  • ExecShell 不会等待,因此 .ps 文件可能会被过早删除。

如果您使用的是 NSIS 3.02,您可以使用 ExecShellWait:

ExpandEnvStrings $0 "%COMSPEC%"
ExecShellWait "" '"$0"' '/C powershell -ExecutionPolicy Bypass -WindowStyle Hidden -File "$InstDir\DeleteVPNConnection.ps1" -connectionName ${VPN_NAME}' SW_HIDE

如果您使用的是旧版 NSIS,则必须使用 ExecWait(不隐藏控制台窗口)或 nsExec plug-in

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-22
    • 2012-01-26
    • 1970-01-01
    • 2016-06-25
    • 2017-09-10
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多