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版本的系统不论在服务里、开机自启里调用该方法都是应用程序文件物理存放目录。
综上所榜,推荐用第一个方法,这样不论程序在哪里调用,取出来的程序路径均一致。