Как найти имя исполняемого файла

Если необходимо узнать путь к исполняемому приложению, рекомендую использовать

string path = System.Environment.GetCommandLineArgs()[0];

Поясню: код @DIlshod работает с проектом, соответственно, если вы попробуете вынести его в отдельный проект-библиотеку, вызывая этот код из приложения, вы будете получать путь до исполняемой assembly, то есть, путь к dll библиотеке (имя будет соответствовать именно *.dll библиотеке, а не *.exe файлу)

Извлекая аргументы командной строки, вы гарантированно заберёте у ОС путь к исполняемому приложению, а не к текущему выполняемому модулю. Решение от @Andrew так же, более правильное, нежели рефлексия.

I want to get the name of the currently running program, that is the executable name of the program. In C/C++ you get it from args[0].

SharpC's user avatar

SharpC

6,8164 gold badges45 silver badges40 bronze badges

asked Mar 5, 2009 at 21:00

Joakim's user avatar

1

System.AppDomain.CurrentDomain.FriendlyName

answered Mar 5, 2009 at 21:33

Steven A. Lowe's user avatar

Steven A. LoweSteven A. Lowe

60.1k18 gold badges131 silver badges202 bronze badges

17

This should suffice:

Environment.GetCommandLineArgs()[0];

answered Mar 5, 2009 at 21:03

James B's user avatar

James BJames B

8,1334 gold badges32 silver badges40 bronze badges

9

System.Diagnostics.Process.GetCurrentProcess() gets the currently running process. You can use the ProcessName property to figure out the name. Below is a sample console app.

using System;
using System.Diagnostics;

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

bluish's user avatar

bluish

26k27 gold badges120 silver badges179 bronze badges

answered Mar 5, 2009 at 21:03

Aaron Daniels's user avatar

Aaron DanielsAaron Daniels

9,5356 gold badges45 silver badges58 bronze badges

9

This is the code which worked for me:

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

All the examples above gave me the processName with vshost or the running dll name.

answered Jun 20, 2012 at 13:12

Tal Segal's user avatar

Tal SegalTal Segal

2,7073 gold badges20 silver badges17 bronze badges

3

Try this:

System.Reflection.Assembly.GetExecutingAssembly()

This returns you a System.Reflection.Assembly instance that has all the data you could ever want to know about the current application. I think that the Location property might get what you are after specifically.

Cristian Ciupitu's user avatar

answered Mar 5, 2009 at 21:01

Andrew Hare's user avatar

Andrew HareAndrew Hare

343k71 gold badges636 silver badges633 bronze badges

5

Why nobody suggested this, its simple.

Path.GetFileName(Application.ExecutablePath)

answered Apr 24, 2014 at 12:52

xmen's user avatar

xmenxmen

1,9372 gold badges25 silver badges47 bronze badges

4

Couple more options:

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

answered Jan 2, 2011 at 22:05

JohnB's user avatar

JohnBJohnB

17.8k16 gold badges98 silver badges110 bronze badges

1

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

will give you FileName of your app like; «MyApplication.exe»

answered Apr 9, 2013 at 14:06

Teoman shipahi's user avatar

Teoman shipahiTeoman shipahi

47.1k14 gold badges133 silver badges157 bronze badges

0

If you need the Program name to set up a firewall rule, use:

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

This will ensure that the name is correct both when debugging in VisualStudio and when running the app directly in windows.

Olivier De Meulder's user avatar

answered Apr 29, 2016 at 17:25

Mark Uebel's user avatar

Mark UebelMark Uebel

1431 silver badge7 bronze badges

2

When uncertain or in doubt, run in circles, scream and shout.

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");
    }
}

I can’t claim to have tested each option, but it doesn’t do anything stupid like returning the vhost during debugging sessions.

answered Jan 8, 2012 at 3:19

Orwellophile's user avatar

OrwellophileOrwellophile

13k3 gold badges68 silver badges45 bronze badges

2

  • System.Reflection.Assembly.GetEntryAssembly().Location returns location of exe name if assembly is not loaded from memory.
  • System.Reflection.Assembly.GetEntryAssembly().CodeBase returns location as URL.

answered Jan 26, 2010 at 16:08

langpavel's user avatar

langpavellangpavel

1,23012 silver badges14 bronze badges

2

This works if you need only the application name without extension:

Path.GetFileNameWithoutExtension(AppDomain.CurrentDomain.FriendlyName);

Pang's user avatar

Pang

9,479146 gold badges81 silver badges122 bronze badges

answered May 23, 2018 at 8:03

RJN's user avatar

RJNRJN

6978 silver badges17 bronze badges

IF you are looking for the full path information of your executable, the reliable way to do it is to use the following:

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

This eliminates any issues with intermediary dlls, vshost, etc.

answered Mar 14, 2013 at 6:01

theMayer's user avatar

theMayertheMayer

15.3k7 gold badges57 silver badges90 bronze badges

4

If you are publishing a single file application in .NET 6.0 or above, you can use Environment.ProcessPath

Ashleigh's user avatar

Ashleigh

3403 silver badges7 bronze badges

answered Dec 29, 2021 at 18:07

dougcunha's user avatar

dougcunhadougcunha

1,20812 silver badges13 bronze badges

Is this what you want:

Assembly.GetExecutingAssembly ().Location

answered Mar 5, 2009 at 21:03

Frederik Gheysels's user avatar

Frederik GheyselsFrederik Gheysels

55.9k9 gold badges101 silver badges153 bronze badges

2

On .Net Core (or Mono), most of the answers won’t apply when the binary defining the process is the runtime binary of Mono or .Net Core (dotnet) and not your actual application you’re interested in. In that case, use this:

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

answered Mar 31, 2017 at 21:53

Tobias's user avatar

TobiasTobias

1,5311 gold badge10 silver badges15 bronze badges

1

For windows apps (forms and console) I use this:

Add a reference to System.Windows.Forms in VS then:

using System.Windows.Forms;
namespace whatever
{
    class Program
    {
        static string ApplicationName = Application.ProductName.ToString();
        static void Main(string[] args)
        {
            ........
        }
    }
}

This works correctly for me whether I am running the actual executable or debugging within VS.

Note that it returns the application name without the extension.

John

answered Jul 15, 2017 at 0:06

John's user avatar

JohnJohn

8191 gold badge9 silver badges20 bronze badges

Super easy, here:

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

Pang's user avatar

Pang

9,479146 gold badges81 silver badges122 bronze badges

answered Feb 3, 2017 at 18:13

Delusional Ghost's user avatar

2

To get the path and the name

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

answered Feb 7, 2020 at 21:05

Ewerton Dutra's user avatar

1

не, просто вот само приложение, допустим я назвал его test.exe
Пользователь его скачает, переименует в «asifhsdfd.exe», да ещё и закинет в свою определенную директорие, к примеру «D:weterterwertwerwertwertwertasifhsdfd. exe»

Вот когда он запустит моё приложение test.exe, теперь уже под своим названием asifhsdfd.exe — мне нужно чтобы само приложение знало своё название и путь до себя, т.е. вот эту строку:
«D:weterterwertwerwertwertwertasifhsdfd. exe»

Т.е. нужно имя исполняемого файла и полный путь до него

Вопрос:

Я хочу получить полный путь к текущему процессу.

Я использую _getcwd для получения текущего рабочего каталога. Но это не включает имя файла.

Как получить имя файла, например: filename.exe?

Лучший ответ:

В окнах вы можете использовать:

TCHAR szExeFileName[MAX_PATH]; 
GetModuleFileName(NULL, szExeFileName, MAX_PATH);

szExeFileName будет содержать полный путь + имя исполняемого файла

[править]

Для более портативного решения используйте argv[0] или какой-либо другой код на платформе. Здесь вы можете найти такой подход: https://github.com/mirror/boost/blob/master/libs/log/src/process_name.cpp.

Ответ №1

argv[0] вашей основной функции является ваше имя файла.

Простой фрагмент кода:

#include<stdio.h>
int main(int argc,char** argv)
{
//access argv[0] here
}

Ответ №2

В Linux имя файла вашего двоичного файла является адресом символической ссылки в /proc/self/exe. Системный вызов readlink можно использовать для поиска адресата символической ссылки.

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

Ответ №3

Обычно вы можете получить имя исполняемого файла из argv[0]:

#include <stdio.h>
int main(int argc, char* argv[])
{
printf("Running: %sn", argv[0]);
return 0;
}

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

Ответ №4

Как уже упоминалось, имя вашего исполняемого файла содержится в argv [0]. Если вам это нужно, вы можете:

cout << argv[0] << endl;

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

cout << __FILE__ << endl;

Перейдите к здесь и выделите “Предопределенные имена макросов”

Ответ №5

Ответ №6

В Linux (POSIX?) есть переменная среды, называемая _, которая содержит текущий процесс.

$ echo $_
echo

В С++

#include <stdlib.h>     /* getenv */
#include<iostream>
int main(){
std::cout << getenv("_") << 'n';
return 0;
}

компиляции

$ c++ a.cpp -o a.out
$ ./a.out

печатает ./a.out (или что-то другое – это выполненная строка, включая путь).

Это имеет определенные преимущества по сравнению с другими подходами, его можно читать глобально (не передавать argv[0]) и не требует обработки файлов.

Небольшая шпаргалка для начинающих, которая лежала раньше на другом моём сайте.

php Как узнать имя исполняемого файла?

Имя исполняемого файла вместе с путем до него от корневого каталога вернет константа __FILE__
<?
echo __FILE__;
?>

php Как узнать домен сервера?

Узнать домен сервера из php можно с помощью переменной окружения $_SERVER
<?
echo $_SERVER['SERVER_NAME'];
?>

php Как узнать ip сервера?

Узнать ip сервера из php можно с помощью переменной окружения $_SERVER
<?
echo $_SERVER['SERVER_ADDR'];
?>

php Как узнать размер файла?

Размер файл можно узнать с помощью функции filesize()
<?
echo filesize('file.txt');
?>

php Как узнать тип переменной?

Строковое представление типа переменной возвращает функция gettype()
<?
$a = 'is string';
echo gettype('$a');
?>

php Как узнать браузер пользователя?

Узнать браузер из php можно с помощью переменной окружения $_SERVER
<?
echo $_SERVER['HTTP_USER_AGENT'];
?>

php Как узнать текущее время?

Узнать текущее время из php можно так
<?
echo date('h:i:s');
?>

php Как узнать путь до текущего исполняемого файла?

Путь до текущего исполняемого файла хранится в константе __DIR__
<?
echo __DIR__;
?>

php Как узнать текущую дату?

Одной из основных функций для работы с датами в php является date() необходимым параметром для которой является строка форматирования. По умолчанию date() возвращает текущие дату и время, если не задан второй парамерт timestamp.

<?
echo date('d m Y');
?>

php Как узнать адрес(url) текущей страницы?

Узнать адрес(url) текущей страницы из php можно с помощью переменной окружения $_SERVER
<?
$current_uri = $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
?>

php Как узнать версию php?

Версию php можно узнать с помошью команды
<?
phpinfo();
?>

Или из константы PHP_VERSION
<?
echo PHP_VERSION;
?>

php Как узнать ip?

Узнать ip из php можно с помощью переменной окружения $_SERVER
<?
$ip = $_SERVER['REMOTE_ADDR'];
?>

php Как узнать ASCII код символа?

ASCII код символа можно узнать с помощью функции ord()
<?
$code = ord('a'); // узнаем код символа "a"
echo $code;
?>

php Как узнать символ по ASCII коду?

Узнать символ по ASCII коду можно с помощью функции chr()
<?
$symbol = chr(97); // узнаем символ с кодом 97
echo $symbol;
?>

php Как узнать цвет пикселя на картинке?

В php цвет пикселя узнать можно с помощью связки функций imagecolorat() и imagecolorsforindex()

<?
$image = imageCreateFromJpeg('image.jpg'); // создаем объект изображения

$x = 10; // координата x точки
$y = 15; // координата y точки

// узнаем индекс цвета в указанной точке
$color = imagecolorat($image, $x, $y);

// узнаем информацию о цвете по его индексу
$color_info = imagecolorsforindex ($image, $color)

// выводим инфорацию о цвете в формате rgba
print_r($color_info);
?>

Понравилась статья? Поделить с друзьями: