以下是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快捷方式问题? 在任何一种情况下,有没有办法解决这个问题?
提前致谢。
答案 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