是否可以通过Windows快捷方式(.lnk)传递参数来运行.jar?
答案 0 :(得分:3)
在Java 7中,是的。您可以根据需要将快捷方式指向c:\windows\system32\java.exe
或javaw.exe
,并包含您在命令行中使用的相同参数。
在干净的Java 8安装中,不容易。遗憾的是,Java 8不再将副本java.exe
和javaw.exe
放入系统文件夹,而是将符号链接放在ProgramData文件夹中。 Windows不喜欢符号链接的快捷方式;有时候他们会工作,有时候他们不会工作。 (即使相同的快捷方式可能适用于某些用户帐户,但不适用于其他用户帐户。)
(看起来,如果你在Java 7之上安装Java 8,它会保留旧的行为,但我还没有彻底调查过这一点。)
这个简单的发射器可能很有用;您可以使用在javaw.exe快捷方式中使用的相同命令行参数为其创建一个或多个快捷方式。
#include <Windows.h>
void NoCRTMain(void)
{
wchar_t * cmdline = GetCommandLineW();
STARTUPINFO si;
PROCESS_INFORMATION pi;
GetStartupInfo(&si);
if (!CreateProcess(L"C:\\ProgramData\\Oracle\\Java\\javapath\\javaw.exe", cmdline, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
MessageBox(NULL, L"Unable to launch Java.", L"runjava.exe", MB_OK);
}
ExitProcess(0);
}
要在Visual Studio中编译,您需要更改一些项目设置:
(或者您可以将主函数从NoCRTMain更改为WinMain,但是您需要安装C运行时或静态链接它。)
附加:,如果您有两个指向同一可执行文件的“开始”菜单快捷方式,则“开始”菜单中只能显示其中一个快捷方式。因此,在这种情况下,您需要有多个启动器副本,每个快捷方式一个。