带有 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 CreateShortCut
是CreateShortCut 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 参数都使用了反引号。)
我正在构建一个需要参数的 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 CreateShortCut
是CreateShortCut 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 参数都使用了反引号。)