IIS и Delphi — получить папку приложения внутри ISAPI

При запуске приложения ISAPI в IIS, если мы вызовем ParamStr(0) или Application.ExeName внутри нашего ISAPI, мы получим папку, в которой установлен IIS (C:\windows...).

Есть ли способ получить путь к папке, содержащей мой ISAPI, вместо папки приложения IIS?


person Rafael Colucci    schedule 17.10.2011    source источник
comment
возможный дубликат stackoverflow.com/questions/4041492/ должен ли я сказать точно дубликат?   -  person RBA    schedule 17.10.2011


Ответы (1)


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

ExtractFilePath (GetModuleName (HInstance))

Используйте ExtractFileDir() вместо ExtractFilePath(), если вам не нужна последняя обратная косая черта.

Обоснование: Согласно документам Delphi,

Несколько переменных, объявленных в модуле System, представляют особый интерес для этих библиотек программирования. ... Во время жизни библиотеки HInstance содержит дескриптор экземпляра.

Используя GetModuleName(), вы получаете имя файла этой DLL. ParamStr(0), с другой стороны, содержит имя основного EXE-файла, в который была загружена эта DLL.

person haimg    schedule 17.10.2011
comment
Да… кажется, это работает, но я получаю в начале пути некоторые символы, которых там быть не должно, например `\\?\C:\inetpub\wwwroot`. - person Rafael Colucci; 17.10.2011
comment
Вы можете продолжить и использовать этот путь как есть. Он будет работать во всех смыслах и целях. Вы также можете попробовать использовать ExpandFileName() и посмотреть, изменит ли он путь на более обычный вариант. - person haimg; 17.10.2011