Я хочу получить имя запущенной в данный момент программы, то есть имя исполняемой программы. В 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.exeWindows.
Этого должно быть достаточно:
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().NamePath.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