Программа создает ключ в реестре для запуска вместе с системой. При запуске она должна читать файлы из своего каталога, она читает из C:\. При простом запуске из своего каталога все нормально. Почему при запуске из реестра, при старте системы, программа не знает свой каталог?
Здравствуйте, demidov2, Вы писали:
D>Программа создает ключ в реестре для запуска вместе с системой. При запуске она должна читать файлы из своего каталога, она читает из C:\. При простом запуске из своего каталога все нормально. Почему при запуске из реестра, при старте системы, программа не знает свой каталог?
Здравствуйте, ak_miass, Вы писали:
_>Здравствуйте, demidov2, Вы писали:
D>>Программа создает ключ в реестре для запуска вместе с системой. При запуске она должна читать файлы из своего каталога, она читает из C:\. При простом запуске из своего каталога все нормально. Почему при запуске из реестра, при старте системы, программа не знает свой каталог?
_>ExtractFilePath(Application->ExeName) — спасёт?
Про это я думал. Смущает то, что текущий каталог для программы зависит от способа запуска. Думал, может я в реестре что-то не так делаю.
Здравствуйте, demidov2, Вы писали:
D>Здравствуйте, ak_miass, Вы писали:
_>>Здравствуйте, demidov2, Вы писали:
_>>ExtractFilePath(Application->ExeName) — спасёт?
D>Про это я думал. Смущает то, что текущий каталог для программы зависит от способа запуска. Думал, может я в реестре что-то не так делаю.
Это не должно смущать, поскольку нигде не оговорено, что при запуске процесса текущим каталогом для него должен быть именно тот, где расположен исполняемый файл.
Так что: ExtractFilePath(Application->ExeName) + SetCurrentDirectory
Здравствуйте, ak_miass, Вы писали:
_>Здравствуйте, demidov2, Вы писали:
D>>Программа создает ключ в реестре для запуска вместе с системой. При запуске она должна читать файлы из своего каталога, она читает из C:\. При простом запуске из своего каталога все нормально. Почему при запуске из реестра, при старте системы, программа не знает свой каталог?
При, как ты выразился, простом запуске, у тебя рабочая папка совпадает с папкой, где находится приложение. Ты попробуй, к примеру, в FAR'е или TotalCmd скопировать полный путь к файлу, перейти в другую папку, вставить скопированный путь в командную строку и запустить. Получишь в точности свою проблему.
Решений вижу два (вру, уже нашел три):
— уже предложенное ExtractFilePath (Application.ExeName)
— каким-то образом прописать в реестре инфу о нужной папке
— прописать себя в реестре в ветке HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths Все исполняемые файлы, что там прописаны, могут быть запущены просто по имени файла "из любого места"