.NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
.NET C#程式啟動閃退,目錄導致的問題
這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。
1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32
2.本次坑:WPF桌面程式通過註冊表設置開機自啟,開機啟動就閃退
我的排查流程:
1.使用註冊表中配置的絕對路徑,直接進入該文件夾中雙擊運行,驗證程式和路徑正確性,結果:失敗。但管理員卻能運行。原因是inno setup打包的時候設置了需要管理員運行。於是重新打包。雖然直接雙擊可以運行,但開機自啟依然不行
2.於是我換了一個方式,在文件夾管理器直接使用絕對路徑訪問運行,結果:失敗。當時懷疑,問題依然是:許可權或者打包軟體問題,但經過反覆驗證是正常的,於是問了一下gpt,他給了一個方向:(應用程式依賴資源文件路徑問題: 如您的應用程式在運行時依賴於某些資源文件(如配置文件、資料庫文件、dll等)。我當時想都能正常運行肯定沒問題,但大腦還是抱著質疑的態度在腦海裡面掃描一遍可能出現路徑暗坑的代碼,然後靈感一閃,想起來我的配置文件讀取只寫了一個文件名,原因也是程式工作目錄導致的,然後進行代碼修正,完美解決
原因
如果您通過某個路徑間接啟動程式(例如通過快捷方式、命令行指定的目錄或是其他方式),這時當前工作目錄可能不再是程式本身的目錄,而是變成了啟動程式的所在目錄或者是命令行指定的工作目錄,這就可能導致程式無法找到(如配置文件、資料庫文件、dll等) 文件
解決方案
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "文件名.json")
所以大家編程的時候操作文件資源相關代碼路徑推薦這種寫法,避免通過其他方式啟動的時候程式崩潰。除非你希望你的文件資源在工作目錄下操作,但這樣會導致不可控,不建議