在.NET中获得执行的exepath的最佳方法是什么?
从位于c:/ dir的程序a.exe中,我需要打开文本文件c:/dir/text.txt。 我不知道a.exe可以放在哪里,但是text.txt将始终处于相同的path中。 如何从内部获取当前正在执行的程序集的名称来编程本身,以便我可以访问文本文件?
编辑 :如果a.exe是Windows服务? 它没有应用程序,因为它不是Windows应用程序。
提前致谢。
我通常访问包含我的应用程序的.exe的目录:
System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
string exePath = Application.ExecutablePath; string startupPath = Application.StartupPath;
编辑 – 不使用应用程序对象:
string path = System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase );
在这里看到更多的信息:
Application.ExecutablePath
Application.StartupPath
获得你感兴趣的程序集(例如,分配给一个System.Reflection.Assembly a
variables):
-
System.Reflection.Assembly.GetEntryAssembly()
或 -
typeof(X).Assembly
对于你感兴趣的程序typeof(X).Assembly
的类X
(对于Windows Forms,你可以使用typeof(Program)
)
然后获取从哪个程序集加载的文件的path:
-
System.IO.Path.GetDirectoryName(a.Location)
正如其他答案中所述,Windows窗体应用程序中的Application
对象也是一种可能性。
使用peSHlr的回答在NUnit中testing时效果也很好。
var thisType = typeof(MyCustomClass); var codeLocation = Path.GetDirectoryName(thisType.Assembly.Location); var codeLocationPath = Path.GetDirectoryName(codeLocation); var appConfigPath = Path.Combine(codeLocationPath, "AppConfig");
MessageBox.Show("This program is located in: " + Environment.CurrentDirectory);