带有 java 参数的 NSIS 快捷方式

NSIS shortcut with java parameters

我正在构建一个需要参数的 Java 应用程序。问题是我准备了一个文件夹,里面有我需要的所有东西 运行 我的罐子。我有一个 javafx 文件夹和一个 JRE 文件夹来制作我的应用程序 standalone/non-JRE-system-dependent。这是我的 NSIS 文件夹的结构:

root folder
 |
 |_uninstaller.exe
 |
 |_subFolder
   |
   |_JREfolder
   |  |
   |  |_JRElibs
   |
   |_JFXfolder
   |  |
   |  |_JFXlibs
   |
   |_OtherResourcesFolders
   |_MainClass.jar 
   |_otherJars.jar

事情是在我的电脑上启动我的 jar,我需要在 cmd 上使用以下句子:

"C:\Program Files\Java\jdk-13\bin\java.exe" --module-path "C:\Program Files\Java\javafx13\lib" --add-modules javafx.controls,javafx.fxml,javafx.graphics,javafx.web,javafx.base --add-opens=javafx.graphics/javafx.scene=ALL-UNNAMED -jar clienteCorreoDefinitivo.jar

所以,当我创建NSIS快捷方式时,我尝试了下面这句话,但它不起作用:

createShortCut "$DESKTOP\ClienteCorreoStephane.lnk" "$INSTDIR\files\java-runtime\bin\java.exe --module-path $INSTDIR\files\javafx13\lib --add-modules javafx.controls,javafx.fxml,javafx.graphics,javafx.web,javafx.base --add-opens=javafx.graphics/javafx.scene=ALL-UNNAMED -jar $INSTDIR\files\clienteCorreoDefinitivo.jar" "" "$INSTDIR\files\recursos\myicon.ico"

关于如何使用这些参数启动此 jar 的任何建议或帮助都很棒。

这就是你需要的:

CreateShortCut \
  `$DESKTOP\ClienteCorreoStephane.lnk` \
  `$INSTDIR\files\java-runtime\bin\java.exe` \
  `--module-path "$INSTDIR\files\javafx13\lib" --add-modules javafx.controls,javafx.fxml,javafx.graphics,javafx.web,javafx.base --add-opens=javafx.graphics/javafx.scene=ALL-UNNAMED -jar "$INSTDIR\files\clienteCorreoDefinitivo.jar"` \
  `$INSTDIR\files\recursos\myicon.ico`

不需要使用\将其拆分为多行,但增加了可读性。)

解释:

syntax for CreateShortCutCreateShortCut link.lnk target.file parameters icon.file(参数比较多,不过这些是你需要的)

现在,目标文件就是 Java 本身,所以一个设置为 $INSTDIR\files\java-runtime\bin\java.exe。字符串的其余部分实际上是传递给 Java 的参数,因此它们进入第 3 个参数。

请注意,我还稍微修改了引号:

这是因为您的 $INSTDIR 很可能是 C:\Program Files,其中包含一个 space。在这种情况下,它会中断,因为它会变成 --module-path C:\Program Files\thing\files\javafx13\lib ... 并且 Java 会读取 C:\Program 作为模块路径的值!因此,这些路径周围必须有 "双引号"

但是,这会与最初用于 NSIS 的整个 "parameters" 参数的引号冲突,这就是为什么我将那个引号封装在 `backticks` 而不是 "双引号"。 (为了保持一致性,我当时对所有 NSIS 参数都使用了反引号。)