Вот отрывок процедуры: Код (Text): .386 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\user32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib .data DirCurrBuf db 50 dup (?) SizeDirBuff dd ($-DirCurrBuf) DataMyDir db "C:\Program Files\MyDir",0 MsgBoxCaption db "Проверка адреса текущего каталога",0 MsgBoxText1 db "Адрес файла НЕ C:\Program Files\MyDir",0 MsgBoxText2 db "Да! Файл запущен из C:\Program Files\MyDir" .code init_dir PROC ;ПРОЦЕДУРА ОПРЕДЕЛЕНИЯ ТЕКУЩЕГО КАТАЛОГА: pushad invoke GetCurrentDirectory,SizeDirBuff,offset DirCurrBuf invoke lstrcmp,offset DirCurrBuf,offset DataMyDir je exit_procedure invoke MessageBox, NULL,offset MsgBoxText1,offset MsgBoxCaption, MB_OK invoke ExitProcess,0 exit_procedure: popad ret init_dir ENDP start: call init_dir invoke MessageBox, NULL,offset MsgBoxText2,offset MsgBoxCaption, MB_OK Exit: invoke ExitProcess,0 end start Решалась задача проверки с какого адреса запускается сам файл. И если с любого другого от заданного переменной DataMyDir-процесс должен закончится. Если сравнение проходит успешно то выход из процедуры и дальше должен выполняться код. Загвоздка в том, что если запустить файл из C:\Program Files\MyDir вручную то все выполняется как задумано. В отладчике все тоже согласно задуманному. Но если запускать через автозапуск в реестре(с адреса C:\Program Files\MyDir) - в любом случае попадаем на месагу MsgBoxText1... Т.е. сранение не верно. Почему так?
Могу только предположить, что в качестве текущей папки устанавливается папка эксплорера, который запускает твой софт
Так дочерний процесс наследует текущий каталог от родительского, если не указать текущий специально, если нужно проверять откуда запущен, лучше юзать GetModuleFileName