определение каталога бинарника
Модератор: Модераторы
определение каталога бинарника
добрый день
как определить полный путь, где лежит бинарник? (не каталог запуска)
GetCurrentDir() - указывает каталог (*) из которого запущен бинарник (что, естественно, не то)
запускать бинарник можно из любого удобного места :о) и GetCurrentDir() - выдает именно этот каталог, но не тот, где лежит бинарник (как-то так)
п.с. набегом, что-то не нашел :о), что-то не торкнуло еще, может не втуда думаю?
спасибо
как определить полный путь, где лежит бинарник? (не каталог запуска)
GetCurrentDir() - указывает каталог (*) из которого запущен бинарник (что, естественно, не то)
запускать бинарник можно из любого удобного места :о) и GetCurrentDir() - выдает именно этот каталог, но не тот, где лежит бинарник (как-то так)
п.с. набегом, что-то не нашел :о), что-то не торкнуло еще, может не втуда думаю?
спасибо
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
ExtractFilePath(Application.ExeName)
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
Самый универсальный способ:
Код: Выделить всё
AppDir:=IncludeTrailingPathDelimiter(ExtractFileDir(ParamStr(0)));да, вроде, как "оно" там и так буде на месте, по другому никакъ... разве не? :о)
лишний раз дергать зачем?!
лишний раз дергать зачем?!
Application.ExeName рекомендуется использовать с осторожностью, а ParamStr(0) - не использовать вообще или с большей осторожностью, особенно, если проект потенциально мультиплатформенный
хорошо, не будем использовать осторожные и потенциально опасные варианты :о)
какие есть правильные методы? :о)
p.s. если нет альтернативы, то значит нет и других путей :о), понятное дело надо разбираться в тонкостях и помнить обо всех этих особенностях. в данном случае выбра нет, сделал ссылку - сам себе товаришь мойор, товарищь деревянкин :о)
спасибо
какие есть правильные методы? :о)
p.s. если нет альтернативы, то значит нет и других путей :о), понятное дело надо разбираться в тонкостях и помнить обо всех этих особенностях. в данном случае выбра нет, сделал ссылку - сам себе товаришь мойор, товарищь деревянкин :о)
спасибо
Последний раз редактировалось sunjob 01.07.2020 21:56:24, всего редактировалось 1 раз.
Что насчёт fileutil.ProgramDirectory?
sunjob писал(а):хорошо, не будем испозовать осторожные и потенциально опасные варианты :о)
Там основная прелесть то не в том, что будут неправильно работать функции RTL freepascal, а в том, что исполняющая система ОС может в принципе не давать определить, в каком каталоге находится запущенный файл.
Будет подкладывать, например, "/" - и всё.
Насколько помню, стоит программу запустить как cgi через апач на линуксе - и там не только каталог запуска не определишь, а вообще всё летит к чертям собачим, включая текущую локаль, временной пояс и все переменные окружения.
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
SSerge писал(а):как cgi через апач на линуксе - и там не только каталог запуска не определишь, а вообще всё летит к
Запускал. Как раз мой вариант, приведенный выше отрабатывал правильно. А также fastcgi, и сервер. Windows естественно также. MacOS не проверял
ProgramDirectory() - это Lazarus функция, я тут использую fpc-3.0.4...(но, по идее, то, что надо)
