Как я могу получить имя текущего исполняемого файла в C #? - PullRequest
321 голосов
/ 06 марта 2009

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

Ответы [ 20 ]

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

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

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 во время сеансов отладки.

5 голосов
/ 14 марта 2013

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

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

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

4 голосов
/ 06 марта 2009

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

Также вы можете использовать Assembly.GetEntryAssembly() или Process.GetCurrentProcess().

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

2 голосов
/ 03 февраля 2017

Супер просто, вот:

Environment.CurrentDirectory + "\\" + Process.GetCurrentProcess().ProcessName
2 голосов
/ 06 марта 2009

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

Assembly.GetExecutingAssembly ().Location
1 голос
/ 15 июля 2017

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

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

John

1 голос
/ 01 апреля 2017

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

var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);
0 голосов
/ 23 мая 2018

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

 Path.GetFileNameWithoutExtension(AppDomain.CurrentDomain.FriendlyName);
0 голосов
/ 23 ноября 2016

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...