从NSIS脚本向Java虚拟机传递参数

5
我正在使用Eclipse开发我的第一个Java应用程序。最近需要通过传递 -Xmx256M 到JVM来调整分配的内存量。该应用程序目前以可运行的jar文件打包,并使用NSIS进行安装。
我在将其安装后,传递参数给jar文件时遇到了问题。这个问题通常是如何解决的呢?以下是我在nsi文件中当前所做的事情:
CreateShortcut "$SMPROGRAMS\$StartMenuGroup\$(^Name).lnk" "$SYSDIR\javaw.exe" "-Xmx256M -jar $INSTDIR\Foo.jar"

这将在 Windows 上创建以下快捷方式目标:
C:\WINDOWS\system32\javaw.exe -Xmx256M -jar  C:\Program Files\Foo\Foo.jar 

很不幸,由于C:\Program Files路径中存在空格,这种方法无法正常工作。如果我手动更改链接以包含引号,则一切正常:

C:\WINDOWS\system32\javaw.exe -Xmx256M -jar "C:\Program Files\Foo\Foo.jar"

更新:-jar和-Xmx256M的顺序已经交换。然而问题仍然存在。路径中的空格导致了问题。我认为我要么需要找到一种在命令中添加引号的方法,就像当我手动更改目标时所示的那样,要么完全改变我的方法!

3个回答

4

NSIS字符串可以使用单引号、双引号或反向单引号进行引用。您还可以使用$\ ($\"等进行转义)

CreateShortcut "$SMPROGRAMS\$StartMenuGroup\$(^Name).lnk" '"$SYSDIR\javaw.exe"' '-Xmx256M -jar "$INSTDIR\Foo.jar"'

2

你尝试过保留引号但转义路径分隔符吗?

C:\WINDOWS\system32\javaw.exe -Xmx256M -jar "C:\\Program Files\\Foo\\Foo.jar"

NSIS不使用\进行转义,而是使用$ \(路径中也无需转义\) - Anders

1

我相信即使没有空格,你也应该在"C:\WINDOWS\system32\javaw.exe"周围加上引号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接