2010-01-04 6 views
1

두 서비스가 있습니다. 한 서비스는 32 비트 (process1)이고 다른 서비스는 64 비트 (process2)입니다. process2가 실행 중인지 확인하기 위해 process1이 사용하는 코드가 있습니다. 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 Server 2003에서 잘 작동하지만, 2008 년 모든 아이디어 Windows 서버에서 작동하지 않는 이유는 무엇입니까?

win2008에 도입 된 서비스에 대해서는 Session0에 대해 읽었지만이 경우에는 둘 다 서비스입니다 (Microsoft가 Java를 너무나 싫어하여 Session1로 이동하지 않는 경우). 따라서 액세스 문제가 없어야합니다.

이 스레드를 찾았습니다 : http://social.msdn.microsoft.com/forums/en-US/winserver2008appcompatabilityandcertification/thread/c7d7e3fe-f8e5-49c3-a16f-8e3dec5e8cf8/ 이것은 32 비트 프로세스가 더 이상 64 비트 프로세스에 액세스 할 수 없다는 것을 나타냅니다. 여기서 무엇을 할 수 있습니까?

답변

0

은 32 비트 프로세스 핸들이 4bytes (포인터 크기)이기 때문에 64bit 프로세스 핸들이 8bytes (포인터 크기?) 일 수 있습니까? 그렇다면 32 비트 프로세스 핸들이 64 비트 프로세스 핸들을 보유하지 않을 수 있습니다.

http://social.msdn.microsoft.com/Forums/en-US/wlsearchdev/thread/9282b719-fc63-482f-bf42-398e8f03238a 희망이

+0

감사합니다. 대신 EnumProcessModulesEx를 사용하려고합니다. –

+0

이것은 대답이 될 수 없습니다. 프로세스는 프로세스가 32 비트인지 64 비트인지에 관계없이 기본적으로 같은 값입니다. WOW64의 일부분을 분해했고, 32 비트 WOW64 핸들을 64 비트 핸들로 변환하는 것은 부호 확장 일뿐입니다. –

0

그 예전의 코드를 사용하여 확인을하고 종료 코드로 결과를 반환하는 64 비트 도우미 프로그램을 작성하는 데 도움이됩니다. CreateProcess() 32 비트 프로그램에서이 프로그램을 실행하십시오.

+0

도우미 프로그램은 Session0에서 액세스 할 수없는 Session1에서 실행되기 때문에 실패 할 것이라고 생각합니다. 적어도 나는 마이크로 소프트 문서에서 그것을 이해한다. –