最近工作中,要做個客戶端提醒的小工具;winform程序自然少不了要讀取和應用程序同一個目錄的配置文件(不是exe.config文件);
要讀取當前應用程序所在目錄我立馬想到了System.Environment.CurrentDirectory 來獲取當前工作目錄。程序運行似乎一切正常完美無缺;
到了第二天早上來上班一開機彈出:“讀取配置文件丟失”。應用程序增加了開機自啟動。彈出這個消息讀取配文件失敗,立馬檢查應用程序目錄下的配置文件是不是被自己刪了。一檢查發現文件還在呀,退出程序重新運行
依然正常,沒有彈出讀取配置文件丟失。然后就看看注冊表里開機啟動項的路徑不在我這個目錄嗎?看了看路徑文件也都對呀。有點納悶了?注銷電腦再啟動試試 依然如此 彈出配置文件丟失。找不到原因直接將獲取的路
徑MessageBox下,程序運行發現路徑確實是這個路徑。
添加了MessageBox這個代碼后繼續開機測試。開機發現彈出的當前目錄是C:\Windows\System32 一下子百思不得其解。心想難不成老子的程序跑到system32下去了嗎?檢查注冊表和sysetm32並沒有我的應用程序。最后心想應該是獲取路徑的代碼有問題。
經反復測試發現System.Environment.CurrentDirectory確實是獲取當前目錄沒錯,但是如果A程序調用B程序 B程序里使用了System.Environment.CurrentDirectory獲取目錄。那么這個B程序里獲取的這個目錄就不再是B的應用程序所在目錄了;而變成了A所在的目錄了。這也就不難發現我在開機時彈出的目錄是C:\Windows\System32 因為開機自啟動程序也是由windows的某個進程調用的。
所以如果winform程序要獲取當前應用程序所在目錄最好不要用System.Environment.CurrentDirectory。而改為:Application.StartupPath 應用程序啟動路徑 這樣不管誰調用它都沒問題。
剛解決問題隨筆記下~
