我使用NSIS安装程序创建简单脚本来安装Java JAR文件并在Windows中创建桌面链接以执行JAR文件。用户选择安装目录(包括可在路径中包含SPACE的JAR文件的位置)。
但是,如何使用NSIS脚本将JAR文件位置转义或放在引号中,具体取决于用户的安装目录?
例如 - 桌面链接可能需要:
C:\Windows\system32\java.exe -jar "D:\Me\Test PPP Install\PPP_Winx64_1.jar"
(注意引号是必需的,所以-jar参数由Java正确处理。)
在我的NSIS脚本中,我使用了类似的东西:
createShortCut "$SMPROGRAMS\${COMPANYNAME}\${APPNAME}.lnk" "java" " -jar $INSTDIR\${PPPJAR}" "$INSTDIR\${PPPICON}"
(这会创建带有附加图标属性的链接。)
我尝试在
中转义引号"\" -jar $INSTDIR\${PPPJAR}\""
和
"" -jar $INSTDIR\${PPPJAR}""
和
" -jar $\"$INSTDIR\${PPPJAR}$\""
和
' -jar "$INSTDIR\${PPPJAR}$"'
但没有工作 - NSIS编译器失败,前两个,或者生成的shotcut省略了所需的引号(最后一项)。
我搜索了其他样本,但都使用了非空间路径 - 但这不实用,因为用户需要能够指定安装目录。
因此,如何使用NSIS脚本将JAR文件的path属性设置为引号?
答案 0 :(得分:2)
NSIS有3个引号字符,因此通常不需要使用$\"
来逃避。
CreateShortcut "$desktop\foo.lnk" "$instdir\foo.exe" '-bar "c:\hello world"'
应该有用......
答案 1 :(得分:0)
Passing arguments to java vm from NSIS script处的逃生提示正常运作。
" -jar $\"$INSTDIR\${PPPJAR}$\"" DOES work.
(错误是我自己的。在测试期间,我创建了一个开始菜单快捷方式和一个桌面快捷方式。不幸的是,我正在测试没有转义序列的桌面。回想起来是傻瓜。)
NSIS太空逃脱工作:
使用'"逃避或""或$ \" 。但并不是说我需要将转义的引号放在JAR文件路径周围 - 而不是整个传递的属性。