在.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 ); 

在这里看到更多的信息:

http://msdn.microsoft.com/en-us/library/aa457089.aspx

Application.ExecutablePath

Application.StartupPath

获得你感兴趣的程序集(例如,分配给一个System.Reflection.Assembly avariables):

  • 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);