我如何获得C#中的当前可执行文件的名称?
我想获取当前正在运行的程序的名称,即程序的可执行文件名称。 在C / C ++中,你可以从args[0]
得到它。
System.AppDomain.CurrentDomain.FriendlyName
System.AppDomain.CurrentDomain.FriendlyName
– 返回带有扩展名的文件名(例如MyApp.exe)。
System.Diagnostics.Process.GetCurrentProcess().ProcessName
– 返回没有扩展名的文件名(例如MyApp)。
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
– 返回完整的path和文件名(例如C:\ Examples \ Processes \ MyApp.exe)。 然后,您可以将此传递到System.IO.Path.GetFileName()
或System.IO.Path.GetFileNameWithoutExtension()
以实现与上述相同的结果。
System.Diagnostics.Process.GetCurrentProcess()
获取当前正在运行的进程。 您可以使用ProcessName
属性来确定名称。 以下是示例控制台应用程序。
using System; using System.Diagnostics; class Program { static void Main(string[] args) { Console.WriteLine(Process.GetCurrentProcess().ProcessName); Console.ReadLine(); } }
这应该足够了:
Environment.GetCommandLineArgs()[0];
这是为我工作的代码:
string fullName = Assembly.GetEntryAssembly().Location; string myName = Path.GetFileNameWithoutExtension(fullName);
上面的所有例子都给了我processName与vshost或运行的dll名称。
尝试这个:
System.Reflection.Assembly.GetExecutingAssembly()
这将返回一个System.Reflection.Assembly
实例,它包含您可能想知道的有关当前应用程序的所有数据。 我认为Location
属性可能会得到你特定的后。
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;
会给你的应用程序的FileName像; “MyApplication.exe”
为什么没有人提出这个,它的简单。
Path.GetFileName(Application.ExecutablePath)
情侣更多的select:
-
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
-
Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
-
System.Reflection.Assembly.GetEntryAssembly().Location
如果程序集未从内存中加载,System.Reflection.Assembly.GetEntryAssembly().Location
将返回exe名称的位置。 -
System.Reflection.Assembly.GetEntryAssembly().CodeBase
返回URL的位置。
当不确定或有疑问时,绕圈,尖叫和大喊。
class Ourself { public static string OurFileName() { System.Reflection.Assembly _objParentAssembly; if (System.Reflection.Assembly.GetEntryAssembly() == null) _objParentAssembly = System.Reflection.Assembly.GetCallingAssembly(); else _objParentAssembly = System.Reflection.Assembly.GetEntryAssembly(); if (_objParentAssembly.CodeBase.StartsWith("http://")) throw new System.IO.IOException("Deployed from URL"); if (System.IO.File.Exists(_objParentAssembly.Location)) return _objParentAssembly.Location; if (System.IO.File.Exists(System.AppDomain.CurrentDomain.BaseDirectory + System.AppDomain.CurrentDomain.FriendlyName)) return System.AppDomain.CurrentDomain.BaseDirectory + System.AppDomain.CurrentDomain.FriendlyName; if (System.IO.File.Exists(System.Reflection.Assembly.GetExecutingAssembly().Location)) return System.Reflection.Assembly.GetExecutingAssembly().Location; throw new System.IO.IOException("Assembly not found"); } }
我不能声称已经testing过每个选项,但是在debugging会话期间不会做任何像返回虚拟主机一样的蠢事。
如果您正在查找可执行文件的完整path信息,可靠的方法是使用以下命令:
var executable = System.Diagnostics.Process.GetCurrentProcess().MainModule .FileName.Replace(".vshost", "");
这消除了与中间dll,vshost等任何问题
如果您需要程序名称来设置防火墙规则,请使用:
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
这将确保在Visual Studio中进行debugging时以及在Windows中直接运行应用程序时,名称都是正确的。
您可以使用Environment.GetCommandLineArgs()
获取参数,并使用Environment.CommandLine
获取input的实际命令行。
此外,您可以使用Assembly.GetEntryAssembly()
或Process.GetCurrentProcess()
。
但是,在debugging的时候,你应该小心,因为这个最后的例子可能会给你的debugging器的可执行文件的名称(取决于你如何连接debugging器),而不是你的可执行文件,其他例子。
这是你想要的:
Assembly.GetExecutingAssembly ().Location
尝试Application.ExecutablePath
超级简单,在这里:
Environment.CurrentDirectory + "\\" + Process.GetCurrentProcess().ProcessName
在.Net Core(或Mono)上,当定义进程的二进制文件是Mono或.Net Core(dotnet)的运行时二进制文件,而不是您感兴趣的实际应用程序时,大多数答案将不适用。 , 用这个:
var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);
对于Windows应用程序(窗体和控制台),我使用这个:
在VS中添加对System.Windows.Forms的引用,然后:
using System.Windows.Forms; namespace whatever { class Program { static string ApplicationName = Application.ProductName.ToString(); static void Main(string[] args) { ........ } } }
这对我来说是正确的工作是否我正在运行实际的可执行文件或在VS中debugging。
请注意,它将返回没有扩展名的应用程序名称。
约翰