Как получить имя exe файла в си
Перейти к содержимому

Как получить имя exe файла в си

  • автор:

Получить имя исполняемого приложения [закрыт]

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.

Закрыт 4 года назад .

Пишу небольшое приложение которое работает с названием файла, но возникла сложность я не могу найти название исполняемого файла, многое перепробовал например:

Завершаются ошибками в компиляции.

в итоге мне нужно indata.php?nt=(название файла)

Keeplod's user avatar

Найдено по запросу «c# get app file name»

Andrew Stop_RU_war_in_UA's user avatar

У тебя namespace какой та странный. Попробуй ка вот что

A K's user avatar

Dilshod K's user avatar

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

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

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

Как получить имя файла исполняемого в данный момент исполняемого файла на C ++ [duplicate]

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

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

7 ответов

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

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

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

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

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

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

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

Определение имени исполняемого файла C

Когда мы компилируем программу на C, вывод сохраняется в a.out. Как мы можем перенаправить скомпилированный вывод в другой файл?

задан 17 марта ’09, 09:03

gcc source.c -o имя — EsmaeelE

8 ответы

Большинство компиляторов C предоставляют -o вариант для этого, например:

ответ дан 17 мар ’09, в 11:03

-ofilename сделает filename вместо a.out .

ответ дан 17 мар ’09, в 11:03

В Unix, откуда появился C, программы на C обычно компилируются модуль за модулем, а затем скомпилированные модули связываются в исполняемый файл. Для проекта, состоящего из модулей foo.c и bar.c , команды будут такими:

(С -c имя выходного файла становится исходным файлом с суффиксом, замененным на .o.)

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

Для одномодульной программы нет никакого смысла сначала компилировать в файл .o, а затем связываться, поэтому достаточно одной команды:

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

ответ дан 17 мар ’09, в 11:03

Это нормально, если ваша программа состоит из одного файла. Если у вас есть больше файлов, я предлагаю использовать make : создать Makefile а затем запустите команду make .

A Makefile это файл, содержащий некоторые правила для компиляции. Примером может быть следующий ( # означает, что строка является комментарием):

вскоре CXX переменная определяет ваш компилятор (gcc, g ++), with CXXFLAGS вы можете определить флаги для вашей компиляции (т.е. -std=c++11 ). Затем вы можете включить и определить пользовательский ( INC_PATH и LIBS : не указано в примере). С участием SOURCEDIR вы можете указать каталог с исходным кодом (где *.c файлы) .Тогда SOURCES в основном говорит, что исходные файлы для компиляции — это все файлы с расширением *.c .

Компания Makefile содержит набор правил, структура которых следующая:

Правило создания исполняемого файла:

что эквивалентно gcc -Wall -Wextra $(OBJECTS) -o yourExecutableName .

$(OBJECTS) являются объектным файлом, полученным в результате компиляции. При выполнении вышеуказанного правила, если они не найдены, make продолжит сканирование файла, чтобы найти правило для их создания. В этом случае правило создания этих файлов:

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

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

20 ответов

System.AppDomain.CurrentDomain.FriendlyName — возвращает имя файла с расширением (напр. myapp.исполняемый.)

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName — возвращает полный путь и имя файла (например, C:\Examples\Processes\MyApp.исполняемый.) Затем вы можете передать это в System.IO.Path.GetFileName() или System.IO.Path.GetFileNameWithoutExtension() для достижения тех же результатов, как и выше.

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

этого должно хватить:

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

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

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

даст вам имя файла вашего приложения, как; » MyApplication.EXE-файл»

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

еще пара вариантов:

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

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

Я не могу утверждать, что протестировал каждый вариант, но он не делает ничего глупого, как возвращение vhost во время сеансов отладки.

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

это гарантирует, что имя правильно как при отладке в VisualStudio, так и при запуске приложения непосредственно в windows.

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

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

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

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

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

для приложений windows (формы и консоль) я использую это:

добавить ссылку на System.Окна.Формы в VS тогда:

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

обратите внимание, что он возвращает имя программы без расширения.

супер просто, здесь:

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *