簡體   English   中英

在 Windows 啟動時運行 Java 應用程序

[英]Run Java application at Windows startup

我有一個包含 Java 應用程序的 JAR 文件。 我怎樣才能讓它從 Windows 開始,而不需要用戶交互?

創建一個 .bat 文件並將其放入:

javaw -Xmx200m -jar C:\Path\to\jarfile\TheJar.jar

然后將 .bat 文件放入 windows 啟動文件夾。

還有一件事:使用javajavaw是有區別的。 當您調試應用程序時, 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 ”)

創建windows服務詳解


注冊編輯

注意:僅編輯高級用戶

僅為當前用戶運行

HKEY_CURRENT_USER/SOFTWARE/MICROSOFT/WINDOWS/CURRENT_VERSION/RUN

為所有用戶運行

hkey_local_machine/SOFTWARE/MICROSOFT/WINDOWS/CURRENT_VERSION/RUN

使用上面的命令創建一個帶有名稱和路徑的字符串

這個問題的答案可能適合您的需求。 將您的 java 應用程序設置為作為 Windows 服務運行,您應該一切順利。

  1. 打開“運行”(Windows 鍵+ R
  2. regedit
  3. 轉到HKey local machine -> Software -> Microsoft -> Windows -> Current version -> run
  4. 單擊它,然后在另一個面板中右鍵單擊任何內容,然后選擇Add -> String value
  5. 將其命名為java
  6. 雙擊它並把它的值如下: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM