Как получить имя текущего исполняемого файла в С#?

Я хочу получить имя текущей запущенной программы, то есть исполняемого имени программы. В C/С++ вы получаете его от args[0].

Ответ 1

System.AppDomain.CurrentDomain.FriendlyName

Ответ 2

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() для достижения тех же результатов, что и выше.

Ответ 3

System.Diagnostics.Process.GetCurrentProcess() получает текущий процесс. Вы можете использовать свойство ProcessName для определения имени. Ниже приведен пример консольного приложения.

using System;
using System.Diagnostics;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Process.GetCurrentProcess().ProcessName);
        Console.ReadLine();
    }
}

Ответ 4

Этого должно быть достаточно:

Environment.GetCommandLineArgs()[0];

Ответ 5

Это код, который работал у меня:

string fullName = Assembly.GetEntryAssembly().Location;
string myName = Path.GetFileNameWithoutExtension(fullName);

Все приведенные выше примеры дали мне имя процесса с именем vshost или запущенным именем dll.

Ответ 6

Попробуйте следующее:

System.Reflection.Assembly.GetExecutingAssembly()

Это возвращает вам System.Reflection.Assembly экземпляр, в котором есть все данные, которые вы когда-либо хотели узнать о текущем приложении. Я думаю, что свойство Location может получить то, что вам нужно.

Ответ 7

System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;

предоставит вам имя_файла вашего приложения; "MyApplication.exe"

Ответ 8

Почему никто не предлагал это, просто.

Path.GetFileName(Application.ExecutablePath)

Ответ 9

Пара дополнительных параметров:

  • System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
  • Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase

Ответ 10

  • System.Reflection.Assembly.GetEntryAssembly().Location возвращает местоположение имени exe, если сборка не загружена из памяти.
  • System.Reflection.Assembly.GetEntryAssembly().CodeBase возвращает местоположение как URL.

Ответ 11

Когда вы сомневаетесь или сомневаетесь, бегите кругами, кричите и кричите.

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

Если вам нужно имя программы для настройки правила брандмауэра, используйте:

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName

Это гарантирует правильность имени при отладке в VisualStudio и при запуске приложения непосредственно в окнах.

Ответ 13

Если вы ищете полную информацию о пути своего исполняемого файла, надежный способ сделать это - использовать следующее:

   var executable = System.Diagnostics.Process.GetCurrentProcess().MainModule
                       .FileName.Replace(".vshost", "");

Это устраняет любые проблемы с промежуточными dll, vshost и т.д.

Ответ 14

Вы можете использовать Environment.GetCommandLineArgs() для получения аргументов и Environment.CommandLine, чтобы получить фактическую командную строку, введенную.

Кроме того, вы можете использовать Assembly.GetEntryAssembly() или Process.GetCurrentProcess().

Однако при отладке вы должны быть осторожны, так как этот последний пример может дать вам исполняемое имя отладчика (в зависимости от того, как вы прикрепляете отладчик), а не от вашего исполняемого файла, как и другие примеры.

Ответ 15

Это то, что вы хотите:

Assembly.GetExecutingAssembly ().Location

Ответ 16

Для приложений 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.

Обратите внимание, что он возвращает имя приложения без расширения.

Джон

Ответ 17

Попробуйте Application.ExecutablePath

Ответ 18

Супер легкий, здесь:

Environment.CurrentDirectory + "\\" + Process.GetCurrentProcess().ProcessName

Ответ 19

В .Net Core (или Mono) большинство ответов не будут применяться, когда двоичный файл, определяющий процесс, представляет собой двоичный файл времени исполнения Mono или .Net Core (dotnet), а не ваше фактическое приложение, которое вас интересует. В этом случае используйте это:

var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);

Ответ 20

Это работает, если вам нужно только имя приложения без extensio:

 Path.GetFileNameWithoutExtension(AppDomain.CurrentDomain.FriendlyName);