2014-01-06 3 views
1

У меня есть приложение Java, которое находится в системном трее, которое я компилирую в исполняемый файл jar. Я хотел бы добавить этот параметр в свою программу, чтобы добавить в элементы запуска системы.Запустить файл Jar при запуске?

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

Когда я попытался добавить его в реестр по адресу [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run] с помощью the code available here, я обнаружил, что под Windows 7 и 8, если у меня нет прав администратора (при запуске из командной строки с повышенными правами), мои изменения в реестре не применяются.

Затем я потратил целый день, пытаясь выяснить, как заставить Джар перезапустить себя с правами администратора, прежде чем я откажусь от этого хакерского обходного пути.

Может ли задача, которую я пытаюсь достичь, даже достигнута, и если да, то как?

+0

Возможный дубликат [Код для автоматического запуска приложения java при запуске Windows] (http://stackoverflow.com/questions/1025807/code-for-auto-starting-a-java-application-on-windows-startup) –

+0

Вы посмотрели на Apache [Commons Daemon] (http://commons.apache.org/proper/commons-daemon/jsvc.html)? –

+0

@ ElliottFrisch У меня нет, но с первого взгляда кажется, что для установки на двоичный компьютер потребуется установить двоичное программное обеспечение. В идеале я бы хотел найти решение, которое может быть полностью включено в мою банку. – Fr33dan

ответ

3

По большей части, вы действительно хотите добавить функцию авто, начиная с входа пользователя, а не при запуске системы. Для окон, если вы добавите запись в реестре в разделе:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 

Это место не страдает от проблем с разрешениями при запуске как обычный пользователь, и было поддержано в течение длительного времени под Windows (я имею в виду Windows 95 временные рамки здесь), поэтому это должно быть безопасное изменение во всех системах.

Для Linux, предполагая, что операционная система соответствует спецификации Open Desktop AutoStart, тогда вам необходимо создать соответствующий файл в $HOME/.config/autostart/, и он должен автозапустить при входе в систему в этом случае.

Для Mac OS X вам необходимо создать панель запуска агента в $HOME/Library/LaunchAgents. Daemons and services documentation подробно описано, как создать этот файл.

+0

Это идеальное решение и охватывает все системы, которые я искал. Я, скорее всего, добавлю некоторые уведомления об Open Desktop AutoStart, чтобы мои пользователи могли знать, не работает ли он, но должны покрывать для меня достаточно систем. Теперь, чтобы найти машину OS X для тестирования. – Fr33dan

0

Работа с пользовательскими привилегиями - не очень хорошая идея. Запись в реестре является предпочтительным способом. Также имейте в виду, что банка сама по себе не является исполняемой, она требует jvm, поэтому вам может понадобиться использовать обертку и зарегистрировать ее.

+0

Я знаю, запись в реестре, которую я создаю, это «javaw -jar [location of jar file]». Он работает, если запись создана (и пользователь не перемещает файл, о котором я предупреждаю). Но по умолчанию запуск jar-файла двойным щелчком по нему фактически не редактирует реестр. Только если я запустил его в качестве администратора, применим ли это изменение. Я могу поместить его в оболочку, но как это обойти проблему с разрешениями? – Fr33dan

+0

Просто не обойдусь разрешениями, это нехорошо. Сообщите пользователю о привилегиях администратора для таких вещей, это мой совет. – AlfredoVR

+0

Я бы, или, скорее, Windows UAC, когда я снова запустил, если это решение было выпущено, но попросить пользователя запустить мое программное обеспечение из командной строки с повышенными правами, не будет приемлемым. (Нет функции «Запуск от имени администратора» для файлов jar) – Fr33dan

Смежные вопросы