NSIS CreateShortCut在捷径

时间:2017-05-16 19:00:17

标签: powershell nsis

以下是NSIS安装程序的摘录。

我的问题是我执行时:

CreateShortCut "$DESKTOP\PRESS_Survey_PS.lnk" $shortcutPath "" $INSTDIR\images\appIcons\Survey.ico

它使用变量$ shortcutPath:

在快捷方式的目标字段中生成它
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command &.\PRESS_Survey.ps1"

$ shortcutPath变量使用以下strcpy构建:

StrCpy $powerShellPath "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command "
StrCpy $shortcutPath $powerShellPath$\"&.\PRESS_Survey.ps1$\"

当我使用:

将$ shortcutPath变量写入我的ps1文件时
FileWrite $0 $powershellComment$shortcutPath$NewLine

它产生了这个:

#C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command "&.\PRESS_Survey.ps1"

当我尝试使用以下方法执行快捷方式时:

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command &.\PRESS_Survey.ps1"

它失败了,询问PRESS_Survey.ps1的位置。

当我用目标字段中的FileWrite版本替换CreateShortCut版本时:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command "&.\PRESS_Survey.ps1"

它运行。

为什么两个实例中$ shortcutPath的值不一样? 这是我做错了还是这是一个Windows快捷方式问题? 在任何一种情况下,有没有办法解决这个问题?

提前致谢。

1 个答案:

答案 0 :(得分:0)

这里可能发生了两件事。

首先,快捷方式目标和参数是两个不同的参数,因此您需要两个变量:

StrCpy $powerShellPath "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
StrCpy $parameters '-command "&.\PRESS_Survey.ps1"'
CreateShortcut "$DESKTOP\PRESS_Survey_PS.lnk" $powerShellPath $parameters "$INSTDIR\images\appIcons\Survey.ico"

另一个问题是.\在路径中,.表示当前目录,我并不建议在快捷方式中使用它。如果您坚持,那么您需要记住,快捷方式中存储的当前/工作目录来自NSIS中使用SetOutPath设置的路径,因此您可能需要执行以下操作:

Push $OUTDIR ; Save the old path
StrCpy $powerShellPath "$SysDir\WindowsPowerShell\v1.0\powershell.exe"
StrCpy $parameters '-command "&.\PRESS_Survey.ps1"'
SetOutPath "c:\path\where\PRESS_Survey\is\located" ; For .\ paths
CreateShortcut "$DESKTOP\PRESS_Survey_PS.lnk" $powerShellPath $parameters "$INSTDIR\images\appIcons\Survey.ico"
Pop $OUTDIR 
SetOutPath $OUTDIR ; Restore