Если необходимо узнать путь к исполняемому приложению, рекомендую использовать
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
6,8164 gold badges45 silver badges40 bronze badges
asked Mar 5, 2009 at 21:00
1
System.AppDomain.CurrentDomain.FriendlyName
answered Mar 5, 2009 at 21:33
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 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
26k27 gold badges120 silver badges179 bronze badges
answered Mar 5, 2009 at 21:03
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 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.
answered Mar 5, 2009 at 21:01
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
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
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 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.
answered Apr 29, 2016 at 17:25
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
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
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
9,479146 gold badges81 silver badges122 bronze badges
answered May 23, 2018 at 8:03
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
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
3403 silver badges7 bronze badges
answered Dec 29, 2021 at 18:07
dougcunhadougcunha
1,20812 silver badges13 bronze badges
Is this what you want:
Assembly.GetExecutingAssembly ().Location
answered Mar 5, 2009 at 21:03
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
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
JohnJohn
8191 gold badge9 silver badges20 bronze badges
Super easy, here:
Environment.CurrentDirectory + "\" + Process.GetCurrentProcess().ProcessName
Pang
9,479146 gold badges81 silver badges122 bronze badges
answered Feb 3, 2017 at 18:13
2
To get the path and the name
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
answered Feb 7, 2020 at 21:05
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);
?>