Запуск файла через реестр отлично от запуска вручную

Тема в разделе "WASM.BEGINNERS", создана пользователем vnb, 6 май 2009.

  1. vnb

    vnb New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2008
    Сообщения:
    22
    Вот отрывок процедуры:
    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap :none  
    4.  
    5.     include \masm32\include\windows.inc
    6.     include \masm32\include\kernel32.inc
    7.     include \masm32\include\user32.inc
    8.    
    9.    
    10.     includelib \masm32\lib\kernel32.lib
    11.     includelib \masm32\lib\user32.lib
    12.    
    13.    
    14. .data
    15. DirCurrBuf          db  50   dup (?)
    16. SizeDirBuff         dd  ($-DirCurrBuf)  
    17. DataMyDir          db  "C:\Program Files\MyDir",0
    18.  
    19. MsgBoxCaption    db  "Проверка адреса текущего каталога",0
    20. MsgBoxText1   db  "Адрес файла НЕ C:\Program Files\MyDir",0
    21. MsgBoxText2       db  "Да! Файл запущен из C:\Program Files\MyDir"
    22.  
    23.  
    24. .code
    25. init_dir PROC                                                   ;ПРОЦЕДУРА ОПРЕДЕЛЕНИЯ ТЕКУЩЕГО КАТАЛОГА:
    26.          pushad                      
    27.    invoke GetCurrentDirectory,SizeDirBuff,offset DirCurrBuf
    28.    invoke lstrcmp,offset DirCurrBuf,offset DataMyDir                  
    29.          je exit_procedure
    30.    invoke MessageBox, NULL,offset MsgBoxText1,offset MsgBoxCaption, MB_OK
    31.    invoke  ExitProcess,0
    32. exit_procedure:
    33.          popad
    34.          ret
    35. init_dir ENDP
    36.  
    37. start:
    38.      call init_dir
    39.    invoke MessageBox, NULL,offset MsgBoxText2,offset MsgBoxCaption, MB_OK
    40. Exit:
    41.     invoke  ExitProcess,0                                          
    42. end start
    Решалась задача проверки с какого адреса запускается сам файл. И если с любого другого от заданного переменной DataMyDir-процесс должен закончится. Если сравнение проходит успешно то выход из процедуры и дальше должен выполняться код.
    Загвоздка в том, что если запустить файл из C:\Program Files\MyDir вручную то все выполняется как задумано. В отладчике все тоже согласно задуманному. Но если запускать через автозапуск в реестре(с адреса C:\Program Files\MyDir) - в любом случае попадаем на месагу MsgBoxText1... Т.е. сранение не верно.
    Почему так?
     
  2. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Могу только предположить, что в качестве текущей папки устанавливается папка эксплорера, который запускает твой софт
     
  3. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Так дочерний процесс наследует текущий каталог от родительского, если не указать текущий специально, если нужно проверять откуда запущен, лучше юзать GetModuleFileName
     
  4. vnb

    vnb New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2008
    Сообщения:
    22
    GetModuleFileName дейстительно удобнее. Всем спасибо за помощь.