通过Windows快捷方式传递参数运行.jar

是否有可能运行.jar通过Windows快捷方式(.lnk)传递参数?

Solutions Collecting From Web of "通过Windows快捷方式传递参数运行.jar"

在Java 7中,是的。 您可以根据需要将快捷方式指向c:\windows\system32\java.exejavaw.exe ,并在命令行中包含相同的参数。

在一个干净的Java 8安装,不容易。 不幸的是,Java 8不再将java.exejavaw.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中进行编译,您需要更改一些项目设置:

  • 在C / C ++代码生成中缓冲区安全性检查为否
  • 在链接器输入中忽略所有默认库为是
  • Linker Advanced中的入口点NoCRTMain
  • 在链接器高级中将随机基地址设置为否( 请参阅此处的评论 )

(或者你可以把NoCRTMain的主函数改成WinMain,但是你需要安装C运行库或者静态链接它。)


另外:在Windows 10中,如果您有两个指向同一个可执行文件的开始菜单快捷方式,则只有其中一个可以在开始菜单中看到。 所以在这种情况下,你需要有多个发射器的副本,每个快捷方式一个。