Программа создает ключ в реестре для запуска вместе с системой. При запуске она должна читать файлы из своего каталога, она читает из C:\. При простом запуске из своего каталога все нормально. Почему при запуске из реестра, при старте системы, программа не знает свой каталог?
27.01.05 07:15: Перенесено модератором из 'C/C++' — Павел Кузнецов
Здравствуйте, demidov2, Вы писали:
D>Программа создает ключ в реестре для запуска вместе с системой. При запуске она должна читать файлы из своего каталога,
Здравствуйте, demidov2, Вы писали:
D>Программа создает ключ в реестре для запуска вместе с системой. При запуске она должна читать файлы из своего каталога, она читает из C:\. При простом запуске из своего каталога все нормально. Почему при запуске из реестра, при старте системы, программа не знает свой каталог?
Здравствуйте, demidov2, Вы писали:
D>Программа создает ключ в реестре для запуска вместе с системой. При запуске она должна читать файлы из своего каталога, она читает из C:\. При простом запуске из своего каталога все нормально. Почему при запуске из реестра, при старте системы, программа не знает свой каталог?
Что значит "знает свой каталог"? У работающего процесса есть такое понятие, как текущий каталог (см. SetCurrentDirectory). Если Вы запускаете программу из Проводника, текущим каталогом указывается тот, который сейчас в Проводнике открыт. Если запускаете ярлыком, там есть спецполе для текущего каталога. Если из реестра — текущим будет C:\.
В любом случае, если Вам надо как-то ссылаться на файлы в каталоге установки, надо его определять тем или иным способом и явно указывать при открытии файлов. Если Вы открываете файлы без указания пути, они будут открыты из текущего каталога, а он может быть любым.
Узнать каталог, откуда запущен exeшник можно, выделив из результата GetModuleFileName каталог. Или взяв инфу из реестра, куда она пишется при установке.
Здравствуйте, Odi$$ey, Вы писали:
OE>Здравствуйте, demidov2, Вы писали:
D>>Программа создает ключ в реестре для запуска вместе с системой. При запуске она должна читать файлы из своего каталога,
OE>почему она должна?
Здравствуйте. Потому что я ее так написал. Она загружает список ListView.
Спасибо за подробный ответ. Да, я открываете файлы без указания пути. Жаль, что текущий каталог зависит от способа запуска. Придется делать GetModuleFileName.