编辑:
从.NET 6开始,推荐使用CA1839中指定的方法:System.Environment.ProcessPath
原始回答:
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
如果您想获取可执行文件:
System.Reflection.Assembly.GetEntryAssembly().Location
如果你想要获取使用你的库的程序集(如果你的代码直接从可执行文件中的类中调用,则可能是与上述相同的程序集):
System.Reflection.Assembly.GetCallingAssembly().Location
如果你只想获取文件的名称而不是路径,使用以下代码:
Path.GetFileName(System.Reflection.Assembly.GetEntryAssembly().Location)
Assembly.GetEntryAssembly().Location
和 Assembly.GetCallingAssembly().Location
返回应用程序的 .dll,而不是 .exe。 - vee除了上面的答案之外。
我编写了以下的test.exe作为控制台应用程序。
static void Main(string[] args) {
Console.WriteLine(
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);
Console.WriteLine(
System.Reflection.Assembly.GetEntryAssembly().Location);
Console.WriteLine(
System.Reflection.Assembly.GetExecutingAssembly().Location);
Console.WriteLine(
System.Reflection.Assembly.GetCallingAssembly().Location);
}
然后我编译了该项目并将其输出重命名为test2.exe文件。输出行是正确的,也相同。System.Diagnostics.Process.GetCurrentProcess().MainModule
尽可能抛出System.NullReferenceException。如果查看MainModule的文档,您将发现该属性还可能引发NotSupportedException、PlatformNotSupportedException和InvalidOperationException异常。var location = System.Reflection.Assembly.GetEntryAssembly().Location;
var directory = System.IO.Path.GetDirectoryName(location);
var file = System.IO.Path.Combine(directory,
System.Diagnostics.Process.GetCurrentProcess().ProcessName + ".exe");
Environment.GetCommandLineArgs()[0]
static void Main(string[] args)
内应该使用这个。很奇怪,因为我记得在 C++ 中,第一个参数总是可执行文件。 - javon27System.Reflection.Assembly.GetEntryAssembly().Location
GetCallingAssembly
不一定会返回您想要的程序集,因为它返回包含调用堆栈中紧接在上面的方法的程序集(即它可能在同一个 DLL 中)。Assembly.GetEntryAssembly()
System.Windows.Forms.Application.ExecutablePath;