我想获取当前正在运行的程序的名称,即程序的可执行文件名。在C / C ++中,您可以从args[0]
获得它。
答案 0 :(得分:383)
System.AppDomain.CurrentDomain.FriendlyName
答案 1 :(得分:212)
System.AppDomain.CurrentDomain.FriendlyName
- 返回带扩展名的文件名(例如MyApp.exe)。
System.Diagnostics.Process.GetCurrentProcess().ProcessName
- 返回文件名,不带扩展名(例如MyApp)。
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
- 返回完整路径和文件名(例如C:\ Examples \ Processes \ MyApp.exe)。然后,您可以将其传递到System.IO.Path.GetFileName()
或System.IO.Path.GetFileNameWithoutExtension()
,以获得与上述相同的结果。
答案 2 :(得分:101)
System.Diagnostics.Process.GetCurrentProcess()
获取当前正在运行的进程。您可以使用ProcessName
属性来确定名称。以下是一个示例控制台应用程序。
using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Process.GetCurrentProcess().ProcessName);
Console.ReadLine();
}
}
答案 3 :(得分:93)
这应该足够了:
Environment.GetCommandLineArgs()[0];
答案 4 :(得分:20)
这是对我有用的代码:
string fullName = Assembly.GetEntryAssembly().Location;
string myName = Path.GetFileNameWithoutExtension(fullName);
上面的所有示例都给了我带有vshost的processName或正在运行的dll名称。
答案 5 :(得分:18)
试试这个:
System.Reflection.Assembly.GetExecutingAssembly()
这将返回一个System.Reflection.Assembly
实例,其中包含您可能想要了解的有关当前应用程序的所有数据。我认为Location
属性可能会在具体后得到你所拥有的。
答案 6 :(得分:11)
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;
会给你的app的FileName像; “MyApplication.exe”
答案 7 :(得分:11)
为什么没人建议,简单。
Path.GetFileName(Application.ExecutablePath)
答案 8 :(得分:9)
更多选择:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
答案 9 :(得分:8)
System.Reflection.Assembly.GetEntryAssembly().Location
将返回exe名称的位置。System.Reflection.Assembly.GetEntryAssembly().CodeBase
将网址作为网址返回。答案 10 :(得分:8)
如果您需要程序名称来设置防火墙规则,请使用:
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
这将确保在VisualStudio中调试和直接在Windows中运行应用程序时名称正确。
答案 11 :(得分:7)
当不确定或有疑问时,绕圈跑,尖叫和喊叫。
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");
}
}
我不能声称已经测试了每个选项,但它没有做任何愚蠢的事情,比如在调试会话期间返回vhost。
答案 12 :(得分:5)
如果您正在查找可执行文件的完整路径信息,可靠的方法是使用以下内容:
var executable = System.Diagnostics.Process.GetCurrentProcess().MainModule
.FileName.Replace(".vshost", "");
这消除了中间dll,vshost等的任何问题。
答案 13 :(得分:4)
您可以使用Environment.GetCommandLineArgs()
获取参数,使用Environment.CommandLine
获取输入的实际命令行。
此外,您可以使用Assembly.GetEntryAssembly()
或Process.GetCurrentProcess()
。
但是,在调试时,你应该小心,因为这个最后的例子可能会给你的调试器的可执行文件名(取决于你如何连接调试器)而不是你的可执行文件,就像其他例子一样。
答案 14 :(得分:2)
这就是你想要的:
Assembly.GetExecutingAssembly ().Location
答案 15 :(得分:2)
超级简单,在这里:
Environment.CurrentDirectory + "\\" + Process.GetCurrentProcess().ProcessName
答案 16 :(得分:1)
在.Net Core(或Mono)上,当定义进程的二进制文件是Mono或.Net Core(dotnet)的运行时二进制文件而不是您感兴趣的实际应用程序时,大多数答案将不适用。在这种情况下,请使用:
var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);
答案 17 :(得分:1)
对于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中运行实际的可执行文件还是调试,这都适用于我。
请注意,它会返回没有扩展名的应用程序名称。
约翰
答案 18 :(得分:0)
尝试Application.ExecutablePath
答案 19 :(得分:0)
如果您只需要没有extensio的应用程序名称,则此方法有效:
Path.GetFileNameWithoutExtension(AppDomain.CurrentDomain.FriendlyName);
答案 20 :(得分:-2)
获取路径和名称
System.Diagnostics.Process.GetCurrentProcess()。MainModule.FileName