Относительный путь к указанному файлу из приложения-службы в Delphi - PullRequest
2 голосов
/ 18 ноября 2009

У меня проблема с загрузкой файла, так как я передаю относительный путь к функции FileExists(Filename: String), и он возвращает false, то есть он не находит файл в каталоге, который я передаю.

У меня есть файл с именем Template.html в каталоге D:\Programming\Delphi\Projects\SendMail и служба, написанная на Delphi, чья .EXE находится в каталоге D:\Programming\Delphi\Automation. Я передаю относительный путь: от .\..\Projects\SendMail\Template.html до FileExists(), но возвращается, что файл не существует.

Я думаю, что это связано с тем, что относительный путь службы и относительный путь приложения различны. Кто-нибудь может мне помочь с этим?

Ответы [ 3 ]

8 голосов
/ 18 ноября 2009

Как сказал Лоренцог, попробуйте указать полный путь.

Вы также можете попробовать установить currentdir по своему вкусу.

//sets currentdir to your application.exe dir
SetCurrentDir(ExtractFileDir(ParamStr(0))); 
3 голосов
/ 18 ноября 2009

Мой опыт показывает, что службы запускаются с рабочей папкой %SystemRoot%\System32 независимо от того, где находится фактический исполняемый файл.

Способ, которым я обошел это ограничение, - это написать ключ реестра во время установки службы (например, HKLM\SOFTWARE\MyCompany\MyApp\INSTALL_PATH), который указывает на то, что я хотел бы рабочей папкой. Затем, когда служба запускается, она извлекает данные из реестра и использует это значение в качестве базы при создании путей к файлам.

3 голосов
/ 18 ноября 2009

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

...