關於C#獲取應用程式的絕對工作路徑問題
阿新 • • 發佈:2021-01-09
C#取應用程式的絕對工作路徑
方法1:
public static string GetAppPath() { string appPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); Regex r = new Regex(@"^[Ff][Ii][Ll][Ee][:][\\]([\S\s]*)"); Match m = r.Match(appPath); if(m.Success) { appPath=m.Groups[1].Value; } return appPath; }
該方法是取應用程式檔案物理存放目錄。不論是在登錄檔開機啟動項還是Windows服務執行程式,取出來的結果均一致。
方法2:
Environment.CurrentDirectory
當程式是手動點開執行的話,取出來的路徑是應用程式檔案物理存放目錄。但當程式在Windows服務或開機自啟動裡執行的話則取出來是C:\Windows\System32。
方法3:
Application.StartupPath
當程式是手動點開執行的話,取出來的路徑是應用程式檔案物理存放目錄。這個方法更奇怪:Window10之前的系統(如Win7\Xp\WindowServer2008等)上把程式做這服務執行或開機自啟的話呼叫該方法取出來是C:\Windows\System32。Win10版本的系統不論在服務裡、開機自啟裡呼叫該方法都是應用程式檔案物理存放目錄。
綜上所榜,推薦用第一個方法,這樣不論程式在哪裡呼叫,取出來的程式路徑均一致。