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

5
能否通过Windows快捷方式(.lnk)传递参数来运行.jar文件?

1
是的。您使用的命令与通过命令行运行它时完全相同(即java -jar YourJar.jar 您的参数)。 - MadProgrammer
@MadProgrammer:恐怕不再那么简单了。请看我的回答。 - Harry Johnston
1个回答

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中编译,您需要更改一些项目设置:
  • 在C/C++代码生成中将缓冲区安全检查改为No
  • 在链接器输入中将忽略所有默认库改为Yes
  • 在链接器高级设置中将入口点改为NoCRTMain
  • 在链接器高级设置中将随机基地址改为No(请参见此处的评论

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


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


我正在使用Java SE 7,我能否只创建一个指向.jar的链接而不需要java.exe? - leolegas
@leolegas:一个简单的jar文件链接似乎可以在Java 7和Java 8中工作。我从未尝试过这样做,不知道添加参数是否会按预期工作。 - Harry Johnston

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