2010-01-04 3 views
1

У нас есть две службы: одна услуга - 32-разрядная (process1), а другая - 64-разрядная (process2). У нас есть код, который process1 использует, чтобы проверить, запущен ли процесс2: HANDLE hProcess; RESET_WIN_ERRNO;Как проверить, работает ли процесс на сервере Windows 2008?

hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, ProcessId); 
if (hProcess == NULL) { 
    os_SetWinErr(err_code); 
    return FALSE; 
} 
CloseHandle(hProcess); 
return TRUE; 

Этот код прекрасно работает в сервере Windows 2003, но не работает в Windows Server 2008. Любые идеи?

Я прочитал о Session0 для сервисов, которые были введены в win2008, но в нашем случае оба являются сервисами (если только Microsoft не ненавидит Java настолько, что переносит его на Session1), поэтому проблем с доступом не должно быть.

Я нашел эту тему: http://social.msdn.microsoft.com/forums/en-US/winserver2008appcompatabilityandcertification/thread/c7d7e3fe-f8e5-49c3-a16f-8e3dec5e8cf8/ , которая заявляет, что 32-разрядный процесс больше не может получить доступ к 64-битовому процессу. Что можно сделать здесь?

ответ

0

может быть, это связано с тем, что 32-битный дескриптор процесса составляет 4 байта (указатель размера), 64-разрядный дескриптор процесса - 8 бит (размер указателя?)? если да, 32-битный дескриптор процесса может не содержать 64-битный дескриптор процесса.

http://social.msdn.microsoft.com/Forums/en-US/wlsearchdev/thread/9282b719-fc63-482f-bf42-398e8f03238a надеюсь, что это помогает

+0

Спасибо, я попытаюсь использовать EnumProcessModulesEx вместо – 2010-01-04 13:01:18

+0

Это не может быть ответом - дескрипторы по существу одинаковы независимо от того, является ли процесс 32-разрядным или 64-разрядным. Я разобрал части WOW64, а преобразование из 32-разрядного дескриптора WOW64 в полный 64-разрядный дескриптор - это просто расширение знака. –

0

Написать 64-битовую вспомогательную программу, которая будет делать проверку с помощью этого старого кода и возвращает результат в качестве кода выхода. Запустите эту программу с помощью CreateProcess() из 32-разрядной программы.

+0

Я думаю, что программа-помощник потерпит неудачу, потому что она будет работать в Session1, из которой Session0 недоступен. По крайней мере, я так понимаю из документации Microsoft. – 2010-01-04 18:02:43

Смежные вопросы