определение каталога бинарника

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

определение каталога бинарника

Сообщение sunjob » 01.07.2020 08:28:16

добрый день

как определить полный путь, где лежит бинарник? (не каталог запуска)

GetCurrentDir() - указывает каталог (*) из которого запущен бинарник (что, естественно, не то)

запускать бинарник можно из любого удобного места :о) и GetCurrentDir() - выдает именно этот каталог, но не тот, где лежит бинарник (как-то так)

п.с. набегом, что-то не нашел :о), что-то не торкнуло еще, может не втуда думаю?
спасибо
Аватара пользователя
sunjob
постоялец
 
Сообщения: 123
Зарегистрирован: 12.01.2011 15:19:54

Re: определение каталога бинарника

Сообщение Снег Север » 01.07.2020 08:50:01

ExtractFilePath(Application.ExeName)
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: определение каталога бинарника

Сообщение sunjob » 01.07.2020 09:00:09

в обычном паскале
Код: Выделить всё
CWD := ExtractFilePath(ParamStr(0));


спасибо
Аватара пользователя
sunjob
постоялец
 
Сообщения: 123
Зарегистрирован: 12.01.2011 15:19:54

Re: определение каталога бинарника

Сообщение Ichthyander » 01.07.2020 13:00:09

Самый универсальный способ:
Код: Выделить всё
AppDir:=IncludeTrailingPathDelimiter(ExtractFileDir(ParamStr(0)));
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 668
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: определение каталога бинарника

Сообщение sunjob » 01.07.2020 14:15:05

да, вроде, как "оно" там и так буде на месте, по другому никакъ... разве не? :о)
лишний раз дергать зачем?!
Аватара пользователя
sunjob
постоялец
 
Сообщения: 123
Зарегистрирован: 12.01.2011 15:19:54

Re: определение каталога бинарника

Сообщение zoltanleo » 01.07.2020 17:37:34

Application.ExeName рекомендуется использовать с осторожностью, а ParamStr(0) - не использовать вообще или с большей осторожностью, особенно, если проект потенциально мультиплатформенный
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 457
Зарегистрирован: 17.10.2013 10:55:01

Re: определение каталога бинарника

Сообщение sunjob » 01.07.2020 17:50:21

хорошо, не будем использовать осторожные и потенциально опасные варианты :о)
какие есть правильные методы? :о)

p.s. если нет альтернативы, то значит нет и других путей :о), понятное дело надо разбираться в тонкостях и помнить обо всех этих особенностях. в данном случае выбра нет, сделал ссылку - сам себе товаришь мойор, товарищь деревянкин :о)

спасибо
Последний раз редактировалось sunjob 01.07.2020 22:56:24, всего редактировалось 1 раз.
Аватара пользователя
sunjob
постоялец
 
Сообщения: 123
Зарегистрирован: 12.01.2011 15:19:54

Re: определение каталога бинарника

Сообщение iskander » 01.07.2020 17:56:46

Что насчёт fileutil.ProgramDirectory?
iskander
энтузиаст
 
Сообщения: 590
Зарегистрирован: 08.01.2012 18:43:34

Re: определение каталога бинарника

Сообщение SSerge » 01.07.2020 18:11:16

sunjob писал(а):хорошо, не будем испозовать осторожные и потенциально опасные варианты :о)


Там основная прелесть то не в том, что будут неправильно работать функции RTL freepascal, а в том, что исполняющая система ОС может в принципе не давать определить, в каком каталоге находится запущенный файл.
Будет подкладывать, например, "/" - и всё.
Насколько помню, стоит программу запустить как cgi через апач на линуксе - и там не только каталог запуска не определишь, а вообще всё летит к чертям собачим, включая текущую локаль, временной пояс и все переменные окружения.
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: определение каталога бинарника

Сообщение Ichthyander » 01.07.2020 18:35:55

SSerge писал(а):как cgi через апач на линуксе - и там не только каталог запуска не определишь, а вообще всё летит к

Запускал. Как раз мой вариант, приведенный выше отрабатывал правильно. А также fastcgi, и сервер. Windows естественно также. MacOS не проверял
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 668
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: определение каталога бинарника

Сообщение sunjob » 01.07.2020 23:09:23

ProgramDirectory() - это Lazarus функция, я тут использую fpc-3.0.4...(но, по идее, то, что надо)
Аватара пользователя
sunjob
постоялец
 
Сообщения: 123
Зарегистрирован: 12.01.2011 15:19:54


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18

Рейтинг@Mail.ru