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

为路径中带有空格的Java JAR文件创建NSIS安装程序快捷方式?,nsis,Nsis,我使用NSIS安装程序创建简单的脚本来安装Java JAR文件,并在Windows中创建一个桌面链接来执行JAR文件。用户选择安装目录(包括JAR文件的位置,该文件可以在路径中包含一个空格) 但是,根据用户的安装目录,如何使用NSIS脚本转义JAR文件位置或将其置于引号中 例如--桌面链接可能需要是: C:\Windows\system32\java.exe -jar "D:\Me\Test PPP Install\PPP_Winx64_1.jar" (请注意,需要引号,以便Java能够正确处

我使用NSIS安装程序创建简单的脚本来安装Java JAR文件,并在Windows中创建一个桌面链接来执行JAR文件。用户选择安装目录(包括JAR文件的位置,该文件可以在路径中包含一个空格)

但是,根据用户的安装目录,如何使用NSIS脚本转义JAR文件位置或将其置于引号中

例如--桌面链接可能需要是:

C:\Windows\system32\java.exe -jar "D:\Me\Test PPP Install\PPP_Winx64_1.jar"
(请注意,需要引号,以便Java能够正确处理-jar参数。)

在我的NSIS脚本中,我使用如下内容:

 createShortCut "$SMPROGRAMS\${COMPANYNAME}\${APPNAME}.lnk" "java" " -jar $INSTDIR\${PPPJAR}" "$INSTDIR\${PPPICON}"
(这将创建具有附加图标属性的链接。)

我试着避开这些引语

"\" -jar $INSTDIR\${PPPJAR}\""

但是没有一个是有效的——NSIS编译器要么失败,前两个失败,要么结果shotcut忽略了所需的引号(最后一项)

我搜索了其他示例,但都使用非空间路径——但这并不实用,因为用户需要能够指定安装目录

因此,如何使用NSIS脚本将JAR文件的path属性置于引号中?

转义技巧确实有效

(错误是我自己的。在测试过程中,我创建了“开始”菜单快捷方式和桌面快捷方式。不幸的是,我正在测试没有转义序列的桌面。回想起来,它是哑的。)

NSIS空间逃逸工作:


使用“转义”或“或$\”。但我不需要将转义引号放在JAR文件路径的周围,而不是整个传递的属性。

NSIS有3个引号字符,因此通常不需要使用
$\“
转义

CreateShortcut“$desktop\foo.lnk”“$instdir\foo.exe”—栏“c:\hello world”
应该可以工作

"" -jar $INSTDIR\${PPPJAR}""
" -jar $\"$INSTDIR\${PPPJAR}$\""
' -jar "$INSTDIR\${PPPJAR}$"'
" -jar $\"$INSTDIR\${PPPJAR}$\"" DOES work.