是否有可能运行.jar通过Windows快捷方式(.lnk)传递参数?
在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运行库或者静态链接它。)
另外:在Windows 10中,如果您有两个指向同一个可执行文件的开始菜单快捷方式,则只有其中一个可以在开始菜单中看到。 所以在这种情况下,你需要有多个发射器的副本,每个快捷方式一个。