Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Остановить службу через MB_SERVICE_NOTIFICATION


Автор: neosapient 17.8.2010, 20:16
Здравтствуйте

Есть служба. Она подгружает мою dll.
Чтобы отладить dll я подключаюсь к процессу службы. Но, так как загрузка происходит очень быстро, в функции DllMain( ... ) я поставил заглушку в виде всплывающего окна
MessageBox(NULL,"Stop","Test",MB_OK|MB_SERVICE_NOTIFICATION);
Успешно приаттачившись к процессу я закрывал всплывшее окно и отлаживал исходник.

Так было  раньше.

Сейчас окно не всплывает, вместо этого функция сразу возвращает 1.
Причиной тому вижу переход
 - с WinXP на Win7
 - с VC2003 на VC2008

Как сделать так, чтобы окно всплывало ?

Автор: Cheloveck 17.8.2010, 20:35
Начиная с Windows Vista процессы, работающие под учёткой SYSTEM не могут показывать окна. Хотя, у меня винда показывала уведомление, что появилось окно. Тогда можно было нажать на него и, выйдя из сеанса (не закрывая), можно было посмотреть окно. 

Предлагаю вместо окна, ждать появления файла (или его удаления).

Автор: neosapient 17.8.2010, 23:57
Тоже выход, спасибо.

Код

void WaitDeleteFile()
{
    char Path[] = "c:/zzz";
    char temp[256];
    HANDLE  hFile = CreateFile(Path,
                       GENERIC_READ,          // open for reading
                       FILE_SHARE_READ,       // share for reading
                       NULL,                  // default security
                       CREATE_NEW,            // create file if it does not exist
                       FILE_ATTRIBUTE_NORMAL, // normal file
                       NULL);
    if( hFile == INVALID_HANDLE_VALUE)
        return;
    CloseHandle(hFile);
    //----
    WIN32_FIND_DATA FindFileData={0};
    while(true){
        hFile = FindFirstFile(Path, &FindFileData);
        if (hFile == INVALID_HANDLE_VALUE){
            return;
        } 
        else{
            ZeroMemory(temp,sizeof(temp));
            _snprintf(temp,sizeof(temp)-1,"%s",FindFileData.cFileName);
            FindClose(hFile);
            Sleep(1);
        }
    }
}

Автор: xvr 18.8.2010, 11:27
Поставьте вызов DebugBreak() (и не забудьте включить JIT Debugger)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)