[英]Run Java application at Windows startup
我有一個包含 Java 應用程序的 JAR 文件。 我怎樣才能讓它從 Windows 開始,而不需要用戶交互?
創建一個 .bat 文件並將其放入:
javaw -Xmx200m -jar C:\Path\to\jarfile\TheJar.jar
然后將 .bat 文件放入 windows 啟動文件夾。
還有一件事:使用java和javaw是有區別的。 當您調試應用程序時, java會更好,應用程序會打印文本或類似的東西,而javaw在您不需要時會更好。 為什么? 因為java使用顯示所有應用程序打印(println、異常堆棧跟蹤等)的控制台運行 java 程序,而javaw不在控制台上運行。
這很簡單,因為您必須輸入快捷方式
Windows 7 C:\users\All Users\Start Menu\Programs\Startup
(管理員)或User home directory(%userProfile%)
Windows 10:在運行shell:startup
在它的屬性 -> 快捷方式 -> 目標 -> java.exe -jar D:\..\runJar.jar
注意:這只會在您登錄后運行
具有管理員權限
sc create serviceName binpath= "java.exe -jar D:\..\runJar.jar"
將創建 windows 服務
如果超時,請使用cmd /c D:\JAVA7~1\jdk1.7.0_51\bin\java.exe -jar d:\jenkins\jenkins.war
但即使這樣你也會超時但在后台 java.exe將開始。 簽入任務管理器
在一些受限的環境中,就像我在公司環境中一樣
錯誤:
The service did not respond to the start or control request in a timely fashion
在這種情況下
cmd /c D:\JAVA7~1\jdk1.7.0_51\bin\java.exe -jar d:\jenkins\jenkins.war
如果您手動運行但將在后台運行,這會給您一個錯誤。
注意:這將在 Windows 登錄啟動時運行(登錄前,基於服務“ Startup Type
”)
注冊編輯
注意:僅編輯高級用戶
僅為當前用戶運行
HKEY_CURRENT_USER/SOFTWARE/MICROSOFT/WINDOWS/CURRENT_VERSION/RUN
為所有用戶運行
hkey_local_machine/SOFTWARE/MICROSOFT/WINDOWS/CURRENT_VERSION/RUN
使用上面的命令創建一個帶有名稱和路徑的字符串
這個問題的答案可能適合您的需求。 將您的 java 應用程序設置為作為 Windows 服務運行,您應該一切順利。
R
)regedit
HKey local machine
-> Software
-> Microsoft
-> Windows
-> Current version
-> run
Add
-> String value
java
javaw -Xmx200m -jar C:\Path\to\jarfile\TheJar.jar
如果您想從 Java 以編程方式執行此操作,您可以直接寫入 Windows 注冊表啟動文件夾。
這是如何以編程方式寫入 Windows 注冊表的鏈接。
當您實現了使用注冊表的功能時,您需要的只是運行此代碼
String value = "\"javaw -jar " + System.getProperty("user.dir") + "\\myJar.jar\"";
WinRegistry.writeStringValue(WinRegistry.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", "myJar autorun key", value);
其中 key 的值需要是命令什么運行你的應用程序,比如 java -jar myJar.jar
只需將其從自動運行中刪除
WinRegistry.deleteValue(WinRegistry.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", "myJar autorun key");
更新
Replace WinRegistry.writeStringValue with WinRegistry.setStringValue recent version of java 1.8.x
為了從任何可執行文件創建服務,請使用Windows Resource Kits 2003中的srvany.exe
(注意=
之后的空格)::
cmd> sc create NAME binPath= "c:\Program Files\Windows Resource Kits\Tools\srvany.exe" ^
type= own start= auto error= normal DisplayName= "NAME for services.msc"
然后傳遞srvany.exe
包裝器將執行的操作:
cmd> reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\NAME\Parameters" ^
/v "Application" ^
/d "\"c:\Program Files\Java\jre7\bin\java.exe\" -cp c:\home\devel\service Main"
上面你看到了空格的引用語法。 下一個啟動服務:
cmd> sc start NAME
如果您出錯,請重新檢查您的設置:
cmd> reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\NAME" /s
並刪除服務:
cmd> sc delete NAME
並再次邁出步伐。
訪問 GUI services.msc
並檢查procexp.exe
服務是否實際啟動。
另請參閱: 使用 sc.exe 創建服務; 如何傳入上下文參數
注意所有涉及的儀器都是微軟官方的!!!
如果您還沒有准備好自己進行配置,或者如果您想在多台計算機上使用相同的功能,那么您可以使用Advanced Installer 。 您可以打包要在 Windows 上安裝的 jar,並設置將在啟動時運行您的程序的參數
使用“winsw” - http://kenai.com/projects/winsw - 它是為 Glassfish v3 編寫的,但通常適用於 Java 程序。
需要安裝 .NET 運行時。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.