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

qlzsbp2j  于 2022-12-30  发布在  .NET
关注(0)|答案(7)|浏览(164)

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

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

v2g6jxz6

v2g6jxz61#

我通常使用以下命令访问包含应用程序的.exe的目录:

System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
to94eoyn

to94eoyn2#

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

wh6knrhe

wh6knrhe4#

获取您感兴趣的程序集(例如,分配给System.Reflection.Assembly a变量):

  • System.Reflection.Assembly.GetEntryAssembly(),或
  • typeof(X).Assembly,表示您感兴趣的程序集中的类X(对于Windows窗体,可以使用typeof(Program)

然后获取程序集a的加载文件的路径:

  • System.IO.Path.GetDirectoryName(a.Location)

Windows窗体应用程序中的Application对象也是一种可能性,如其他答案中所述。

20jt8wwn

20jt8wwn5#

在VB.NET中,我们可以通过以下方式获取:

Assembly.GetEntryAssembly.Location

在C#中:

Assembly.GetEntryAssembly().Location
p8h8hvxi

p8h8hvxi6#

在NUnit中测试时,使用peSHlr的答案效果也很好。

var thisType = typeof(MyCustomClass);

var codeLocation = Path.GetDirectoryName(thisType.Assembly.Location);

var codeLocationPath = Path.GetDirectoryName(codeLocation);

var appConfigPath = Path.Combine(codeLocationPath, "AppConfig");
r7xajy2e

r7xajy2e7#

MessageBox.Show("This program is located in: " + Environment.CurrentDirectory);

相关问题