как запустить приложение Java, независимое от системы, при запуске Windows

#java #windows #registry

#java #Windows #реестр

Вопрос:

Я хочу автоматически запускать Java-приложение под Windows во время запуска, но не в зависимости от конкретной Windows или специальной JRE-версии.

Как правило, хорошим способом запуска программ во время входа в Windows было бы добавить запись реестра в

 HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun 
  

Но кажется, что системный ПУТЬ не вычисляется, когда Windows пытается запустить программы, перечисленные в разделе запуска реестра.

Итак, эти обе записи работают:

 "C:Program FilesJavajdk1.8.0_111binjavaw" -jar c:pathtojava.jar
"C:ProgramDataOraclejavajavapathjavaw" -jar c:pathtojava.jar
  

Но это не появляется:

 javaw -jar c:pathtojava.jar
  

Теперь последнее работает при ручном вводе в окне консоли, потому что там требуемый ПУТЬ существует и оценивается:

 PATH=....;C:ProgramDataOracleJavajavapath;....
  

Теперь я хочу добавить запись реестра из программы автоматического установщика, и я хотел бы, чтобы она была сформирована как «независимая от системы Windows» (от Vista до Win 10, и, кроме того, не зависит от версии установленной JRE). Итак, я не знаю общего пути к JRE и поэтому не могу добавить конкретную команду ЗАПУСКА в реестр.

Кто-нибудь знает, как правильно добавить независимые от системы JRE-вызовы в раздел запуска реестра?

Я уже пробовал использовать командный файл, например, «startup.cmd» с содержимым java -jar file.jar там, добавил вызов этого файла в реестр, и да, это сработало, java была найдена, приложение было запущено, но при использовании этого метода у меня появляется раздражающее черное окно командного терминала, которое остается открытым все время, пока запущено приложение Java.

Спасибо, Томбо

Комментарии:

1. Для пояснения: вы говорите, что «ПУТЬ разрешен, если я вызываю командный файл, но он не разрешен, если я вызываю javaw.exe через команду «Выполнить мой реестр» в вашем последнем предложении?

2. да. очевидно, что информация о ПУТИ недоступна при вызове prg непосредственно из реестра, но при вызове через обход пакета или cmd-файла ПУТЬ существует локально в пакете или cmd-файле.

Ответ №1:

Измените свой startup.cmd с

 java -jar file.jar
  

Для

 start java -jar file.jar
  

Это запустит java.exe в новом процессе позвольте вашему пакетному исполнителю завершить работу.

Комментарии:

1. это работает, тогда черное окно командного терминала, по крайней мере, не остается включенным постоянно, но все еще мигает во время выполнения start , что все еще может сбить пользователя с толку. Поэтому я бы предпочел способ, при котором окно терминала вообще не будет видно.

2. Вы пробовали использовать /b такой параметр, как start /b java -jar file.jar или, возможно, использовать /min вместо этого?