【问题标题】:Create a NSIS installer shortcut for a Java JAR file with a space in the path?为路径中有空格的 Java JAR 文件创建 NSIS 安装程序快捷方式?
【发布时间】:2014-06-19 18:51:50
【问题描述】:

我使用 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}\""

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

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

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

但没有一个有效——NSIS 编译器要么失败,前两个,要么生成的快照省略了所需的引号(最后一项)。

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

因此,如何使用 NSIS 脚本将 JAR 文件的路径属性放在引号中?

【问题讨论】:

    标签: nsis


    【解决方案1】:

    NSIS 有 3 个引号字符,因此通常不必使用 $\" 转义。

    CreateShortcut "$desktop\foo.lnk" "$instdir\foo.exe" '-bar "c:\hello world"' 应该可以工作...

    【讨论】:

      【解决方案2】:

      Passing arguments to java vm from NSIS script 的逃生技巧确实有效。

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

      (错误是我自己的。在测试期间,我创建了一个开始菜单快捷方式和一个桌面快捷方式。不幸的是,我正在测试没有转义序列的桌面。回想起来很愚蠢。)

      NSIS 空间逃脱工作:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-14
        • 1970-01-01
        • 2016-07-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多