首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 程序通過批處理實現開機自啟動並解決工作目錄問題

     編輯:程式設計綜合問答

問題場景

  • Java 程序打包為 app.jar,配合獨立 JRE 目錄運行。
  • 批處理腳本 start java\jre\bin\javaw -jar app.jar 雙擊正常。
  • 放入註冊表 Run 鍵實現開機自啟動時,程序工作目錄變為 C:\Windows\System32,導致相對路徑失效。

根本原因

註冊表啟動進程的默認工作目錄是系統目錄,而非腳本所在目錄。System.getProperty("user.dir") 返回的就是這個錯誤路徑。

解決方案:使用 %~dp0 獲取腳本目錄

@echo off
REM %~dp0 表示批處理文件所在的驅動器和路徑(包含結尾反斜槓)
start "" "%~dp0java\jre\bin\javaw" -jar "%~dp0app.jar"

關鍵點解析

  • %~dp0:展開為批處理文件的絕對路徑(如 D:\myapp\),已包含尾部反斜槓。
  • start "":空標題參數防止路徑含空格時被誤解析為標題。
  • 對 javaw.exe 和 app.jar 都加上 %~dp0 前綴,確保無論從哪裡啟動都能定位資源。

驗證方法

  1. 在代碼中打印 System.getProperty("user.dir")。
  2. 通過註冊表啟動後查看日誌,應顯示為腳本所在目錄而非 System32。

補充:註冊表鍵值設置

鍵: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
值名: MyJavaApp
值數據: "D:\myapp\startup.bat"  (雙引號包裹路徑)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved