У нас есть две службы: одна услуга - 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-битовому процессу. Что можно сделать здесь?
Спасибо, я попытаюсь использовать EnumProcessModulesEx вместо – 2010-01-04 13:01:18
Это не может быть ответом - дескрипторы по существу одинаковы независимо от того, является ли процесс 32-разрядным или 64-разрядным. Я разобрал части WOW64, а преобразование из 32-разрядного дескриптора WOW64 в полный 64-разрядный дескриптор - это просто расширение знака. –