我正在为我们的新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参数,同样的问题)。
答案 0 :(得分:3)
您的代码存在两个问题:
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。