2014-01-06 149 views
1

我有一個Java應用程序,它位於我編譯爲可執行jar文件的系統托盤中。我想在我的程序中添加選項以添加到系統啓動項目中。啓動時運行Jar文件?

由於我不知道任何統一的方式爲所有操作系統我認爲我會寫代碼來執行它爲每一個我打算支持,所以我開始使用Windows做到這一點。

當我試圖將其在[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]添加到註冊表使用the code available here我發現,在Windows 7下8除非我有管理員權限(通過從提升的命令提示符下運行),我的編輯註冊表不適用。

然後,我花了一天時間試圖找出如何讓罐子管理員權限重振自己之前我放棄了對哈克的解決方法。

我試圖實現的任務甚至可以完成,如果是的話,該怎麼做?

+0

可能重複的[代碼爲自動啓動在Windows啓動時的Java應用程序(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我沒有,但一目瞭然,似乎需要在用戶計算機上安裝二進制軟件。理想情況下,我想要一個可以完全包含在我的jar中的解決方案。 – Fr33dan

回答

3

大多數情況下,您實際上希望在用戶登錄時添加自動啓動功能,而不是在系統啓動時啓動。對於Windows,如果你在添加註冊表項:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 

此位置不從權限問題時,作爲一個普通用戶的身份運行,並已在Windows下的很長一段時間(我想支持Windows 95受苦時間框架),所以應該是所有系統的安全更改。

對於Linux,假定操作系統遵循Open Desktop AutoStart規範,則需要在$HOME/.config/autostart/中創建適當的.desktop文件,並且在該情況下它應該在登錄時自動啓動。

對於Mac OS X,你需要在$HOME/Library/LaunchAgents創建展開劑的plist。 Daemons and services documentation詳細說明如何構建這個文件。

+0

這是完美的,涵蓋了我所需要的所有系統。我可能會添加一些關於Open Desktop AutoStart的通知,以便我的用戶可以瞭解它是否無效,但應該爲我覆蓋足夠的系統。現在找到要測試的OS X機器。 – Fr33dan

0

解決用戶權限並不是一個好主意。註冊表項是首選的方法。另外請記住,jar本身不可執行,它需要jvm,所以你可能想要做的是使用包裝並註冊它。

+0

我知道,我創建的註冊表項是「javaw -jar [jar文件的位置]」。如果條目被創建(並且用戶不移動我警告的文件),它會起作用。但通過雙擊默認啓動jar文件並不實際編輯註冊表。只有當我以管理員身份運行它時,纔會應用編輯。我可以把它放在一個包裝中,但是如何解決權限問題呢? – Fr33dan

+0

只是不避開權限,這不是一件好事。通知用戶有關這種事情的需求管理員權限,這是我的建議。 – AlfredoVR

+0

我會,或者更確切地說Windows UAC會在我重新啓動的時候,如果該解決方案已經平息了,但要求用戶從提升的命令提示符下運行我的軟件是不可接受的。 (對於jar文件沒有「以管理員身份運行」功能) – Fr33dan