Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Guest

Guest


Профиль | Цитировать


vasketsov
Теперь Вам спасибо за обстоятельный и, по всей видимости, правильный ответ. Однако,  кое-какие вопросы у меня ещё остались (наверное, я тупой ... или самокритичный ).

В связи с вышеобозначенным статусом начинающего программиста мне достаточно  сложно разобраться в данном вопросе на низком уровне (хотя абсолютно согласен с тем,  что истину можно найти именно там и не только по этому вопросу). Хочу подойти к  вопросу с немного другой стороны. В SDK нашёл определение текущего каталога как  каталога, из которого запущено приложение, кроме явно изменённого. В то же время  одним из параметров функции CreateProcess(), с помощью которой система создаёт  новый процесс, является указатель на строку, задающую текущий каталог для  создаваемого процесса. Если этот параметр равен NULL, в качестве текущего каталога  для нового процесса задаётся текущий каталог родительского процесса. Выходит, что,  как Вы и сказали, текущим каталогом для процесса может быть абсолютно любой каталог,  указанный родительским процессом. В моём случае функция GetCurrentDirectory()  возвратила "C:\Documents and Settings\имя_учётной_записи" при автозапуске программы  из реестра. Значит, либо этот каталог явно указан в функции CreateProcess(), либо это  текущий каталог родительского (системного) процесса, создающего мой процесс.  Возникает вопрос - а почему система не задаёт в качестве текущего каталог, в котором  расположен исполняемый файл? Ведь ей известен полный путь к нему, и именно так она  поступает в остальных случаях (при автозапуске через папку "Автозагрузка" и при  обычном запуске). Почему такое происходит только в случае автозапуска через реестр?

Отправлено: 00:45, 31-01-2003 | #5