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

时间:2015-03-25 20:49:55

标签: java windows jar shortcut

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

1 个答案:

答案 0 :(得分:3)

在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入口点
  • Linker Advanced(see commentary here
  • 中的随机基址为否

(或者您可以将主函数从NoCRTMain更改为WinMain,但是您需要安装C运行时或静态链接它。)


Windows 10中的

附加:,如果您有两个指向同一可执行文件的“开始”菜单快捷方式,则“开始”菜单中只能显示其中一个快捷方式。因此,在这种情况下,您需要有多个启动器副本,每个快捷方式一个。