Вопрос по windows, jar, shortcut, java – Запустите .jar через ярлык Windows, передав аргументы

4

Можно ли запустить .jar через ярлык Windows (.lnk), передав аргументы?

Да. Вы используете точную команду, как если бы вы выполняли ее через командную строку (т.е. java -jar YourJar.jar ваши параметры) MadProgrammer
Боюсь, @MadProgrammer: уже не так просто. Смотри мой ответ. Harry Johnston

Ваш Ответ

1   ответ
3

c:\windows\system32\java.exe или жеjavaw.exe при необходимости и включите те же аргументы, которые вы использовали бы в командной строке.

В чистой установке Java 8 не легко. К сожалению Java 8 больше не помещает копииjava.exe а такжеjavaw.exe в системную папку, но вместо этого помещает символические ссылки в папку ProgramData. Windows не любит ярлыки на символические ссылки; иногда они работают, иногда нет. (Дажетак же ярлык может работать для некоторых учетных записей пользователей, но не для других.)

(Кажется, что если вы устанавливаете Java 8 поверх Java 7, это сохраняет старое поведение, но я еще не исследовал это полностью.)

Этот простой лаунчер может быть полезен; Вы можете создать один или несколько ярлыков для него с теми же параметрами командной строки, которые вы использовали бы в ярлыке для 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 ++ Генерация кодаИгнорировать все библиотеки по умолчанию, чтобы Да в вводе компоновщикаТочка входа в NoCRTMain в Linker AdvancedРандомизированный базовый адрес в No в Linker Advanced (см. комментарий здесь)

(Или вы можете изменить основную функцию с NoCRTMain на WinMain, но затем вам нужно установить среду выполнения C или связать ее статически.)

Дополнительно: в Windows 10, если у вас есть два ярлыка «Пуск», указывающие на один и тот же исполняемый файл, только один из них будет виден в меню «Пуск». Так что в этом случае вам нужно иметь несколько копий модуля запуска, по одной для каждого ярлыка.

Я использую Java SE 7. Могу ли я просто создать ссылку на .jar без java.exe? leolegas
@leolegas: простая ссылка на файл jar, кажется, работает, как в Java 7, так и в Java 8. Я никогда не пробовал делать это таким образом, я не знаю, будет ли добавление аргументов работать так, как ожидалось. Harry Johnston

Похожие вопросы