我需要从位于c:/dir的程序a.exe中打开文本文件c:/dir/text.txt。我不知道a.exe可能位于何处,但text.txt将始终位于同一路径。如何从程序本身中获取当前正在执行的程序集的名称,以便我可以访问该文本文件?
EDIT:如果. exe是Windows服务怎么办?它没有应用程序,因为它不是Windows应用程序。
v2g6jxz61#
我通常使用以下命令访问包含应用程序的.exe的目录:
System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
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
k4emjkb13#
Application.ExecutablePathApplication.StartupPath
wh6knrhe4#
获取您感兴趣的程序集(例如,分配给System.Reflection.Assembly a变量):
System.Reflection.Assembly a
System.Reflection.Assembly.GetEntryAssembly()
typeof(X).Assembly
X
typeof(Program)
然后获取程序集a的加载文件的路径:
a
System.IO.Path.GetDirectoryName(a.Location)
Windows窗体应用程序中的Application对象也是一种可能性,如其他答案中所述。
Application
20jt8wwn5#
在VB.NET中,我们可以通过以下方式获取:
Assembly.GetEntryAssembly.Location
在C#中:
Assembly.GetEntryAssembly().Location
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");
r7xajy2e7#
MessageBox.Show("This program is located in: " + Environment.CurrentDirectory);
7条答案
按热度按时间v2g6jxz61#
我通常使用以下命令访问包含应用程序的.exe的目录:
to94eoyn2#
编辑-不使用应用程序对象:
更多信息,请访问:
http://msdn.microsoft.com/en-us/library/aa457089.aspx
k4emjkb13#
Application.ExecutablePath
Application.StartupPath
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
对象也是一种可能性,如其他答案中所述。20jt8wwn5#
在VB.NET中,我们可以通过以下方式获取:
在C#中:
p8h8hvxi6#
在NUnit中测试时,使用peSHlr的答案效果也很好。
r7xajy2e7#