在.NET中获取执行exe路径的最佳方法是什么?

pis*_*hio 64 .net c# filesystems

从位于c:/ dir的程序a.exe我需要打开文本文件c:/dir/text.txt.我不知道a.exe的位置,但text.txt将始终位于同一路径中.如何从内部获取当前正在执行的程序集的名称到程序本身,以便我可以访问该文本文件?

编辑:如果a.exe是Windows服务怎么办?它没有应用程序,因为它不是Windows应用程序.

提前致谢.

Tim*_*ren 130

我通常访问包含我的应用程序的.exe的目录:

System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果它在MS测试中执行,则此代码不起作用:在这种情况下,GetEntryAssembly()返回null并且代码失败. (13认同)
  • 对于那些在LINQPad中尝试上述行并获得NullReferenceException的人来说,`Assembly.GetEntryAssembly()`在LINQPad中返回null,但在你自己的.NET应用程序中,它应该返回一个非null值. (5认同)
  • 我用`Assembly assembly = Assembly.GetEntryAssembly()来解决单元测试问题?Assembly.GetExecutingAssembly();` (4认同)
  • 我也是,看到其他答案,我现在觉得我已经错过了一招! (2认同)

Win*_*ith 13

string exePath = Application.ExecutablePath;
string startupPath = Application.StartupPath;
Run Code Online (Sandbox Code Playgroud)

编辑 - 不使用应用程序对象:

string path = System.IO.Path.GetDirectoryName( 
      System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase );
Run Code Online (Sandbox Code Playgroud)

有关详情,请参阅此处:

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

  • 只是想指出`Application`类型位于`System.Windows.Forms`命名空间 - 请参阅:http://msdn.microsoft.com/en-us/library/system.windows.forms.application. startuppath(v = vs.110)的.aspx (3认同)