为路径中有空格的Java JAR文件创建NSIS安装程序快捷方式?

时间:2014-06-19 18:51:51

标签: nsis

我使用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属性设置为引号?

2 个答案:

答案 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文件路径周围 - 而不是整个传递的属性。