Я хочу получить имя запущенной в данный момент программы, то есть имя исполняемой программы. В C / C ++ вы получаете его args[0]
.
Я хочу получить имя запущенной в данный момент программы, то есть имя исполняемой программы. В C / C ++ вы получаете его args[0]
.
Ответы:
System.AppDomain.CurrentDomain.FriendlyName
System.AppDomain.CurrentDomain.FriendlyName
приложений, развернутых в Click-Once. Для нас это возвращает DefaultDomain , а не оригинальное имя exe.
string file = object_of_type_in_application_assembly.GetType().Assembly.Location; string app = System.IO.Path.GetFileNameWithoutExtension( file );
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()
достичь тех же результатов, что и выше.
/?
переключатель), потому что использование расширения и пути просто загромождает его без необходимости.
GetCurrentProcess()
Process.GetCurrentProcess().ProcessName()
возвращает MyApp.vshost для меня.
System.Diagnostics.Process.GetCurrentProcess()
получает текущий запущенный процесс Вы можете использовать ProcessName
свойство, чтобы выяснить имя. Ниже приведен пример консольного приложения.
using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Process.GetCurrentProcess().ProcessName);
Console.ReadLine();
}
}
.../bin/mono
* nixes или .../mono.exe
Windows.
Этого должно быть достаточно:
Environment.GetCommandLineArgs()[0];
Environment.GetCommandLineArgs()
это точный аналог C # argv
из C / C ++.
Path.GetFileNameWithoutExtension(Environment.GetCommandLineArgs()[0])
Это код, который работал для меня:
string fullName = Assembly.GetEntryAssembly().Location;
string myName = Path.GetFileNameWithoutExtension(fullName);
Все приведенные выше примеры дали мне имя процесса с vshost или имя запущенной DLL.
Попробуй это:
System.Reflection.Assembly.GetExecutingAssembly()
Это возвращает вам System.Reflection.Assembly
экземпляр, который содержит все данные, которые вы когда-либо хотели бы знать о текущем приложении. Я думаю, что Location
собственность может получить то, что вам нужно конкретно.
CodeBase
а не Location
в случае, если функция теневого копирования .NET активна. См. Blogs.msdn.com/suzcook/archive/2003/06/26/…
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;
даст вам FileName вашего приложения, как; "MyApplication.exe"
Почему никто не предложил это, это просто.
Path.GetFileName(Application.ExecutablePath)
Application.ExecutablePath
«S исходный код .
Еще пара вариантов:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
Если вам нужно имя программы для настройки правила брандмауэра, используйте:
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
Это обеспечит правильность имени как при отладке в VisualStudio, так и при запуске приложения непосредственно в Windows.
Когда сомневаешься или сомневаешься, бегай кругами, кричи и кричи.
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 во время сеансов отладки.
System.Reflection.Assembly.GetEntryAssembly().Location
возвращает расположение имени exe, если сборка не загружена из памяти.System.Reflection.Assembly.GetEntryAssembly().CodeBase
возвращает местоположение как URL.Если вы ищете полную информацию о пути вашего исполняемого файла, надежный способ сделать это - использовать следующее:
var executable = System.Diagnostics.Process.GetCurrentProcess().MainModule
.FileName.Replace(".vshost", "");
Это устраняет любые проблемы с dll, vshost и т. Д.
Вы можете использовать Environment.GetCommandLineArgs()
для получения аргументов и Environment.CommandLine
для получения фактической командной строки, как введено.
Также вы можете использовать Assembly.GetEntryAssembly()
или Process.GetCurrentProcess()
.
Однако при отладке следует соблюдать осторожность, поскольку в этом последнем примере может быть указано имя исполняемого файла вашего отладчика (в зависимости от того, как вы присоединяете отладчик), а не свой исполняемый файл, как и другие примеры.
Environment.CommandLine
дает абсолютный путь, а не введенную командную строку, по крайней мере, в Mono / Linux.
Это то, что вы хотите:
Assembly.GetExecutingAssembly ().Location
В .Net Core (или Mono) большинство ответов не будут применяться, если двоичным файлом, определяющим процесс, является исполняемый двоичный файл Mono или .Net Core (dotnet), а не ваше собственное приложение, которое вас интересует. В этом случае , использовать этот:
var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);
GetEntryAssembly()
может вернуть ноль.
Для приложений Windows (формы и консоли) я использую это:
Добавьте ссылку на System.Windows.Forms в VS затем:
using System.Windows.Forms;
namespace whatever
{
class Program
{
static string ApplicationName = Application.ProductName.ToString();
static void Main(string[] args)
{
........
}
}
}
Это работает правильно для меня, независимо от того, запускаю ли я исполняемый файл или отлаживаюсь в VS.
Обратите внимание, что он возвращает имя приложения без расширения.
Джон
Супер просто, вот:
Environment.CurrentDirectory + "\\" + Process.GetCurrentProcess().ProcessName
Чтобы получить путь и имя
System.Diagnostics.Process.GetCurrentProcess (). MainModule.FileName