如何检查进程是否仍在Windows Server 2008上运行?

时间:2010-01-04 09:08:10

标签: c++ windows-server-2008 32-bit openprocess

我们有两个服务:一个服务是32位(process1),另一个是64位(process2)。 我们有process1用于检查process2是否正在运行的代码:     处理hProcess;     RESET_WIN_ERRNO;

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

此代码在Windows Server 2003中正常工作,但在Windows Server 2008中不起作用。 有什么想法吗?

我读到了关于win2008中引入的服务的Session0,但在我们的例子中,两者都是服务(除非Microsoft非常讨厌将其移动到Session1),因此不存在任何访问问题。

我找到了这个帖子:http://social.msdn.microsoft.com/forums/en-US/winserver2008appcompatabilityandcertification/thread/c7d7e3fe-f8e5-49c3-a16f-8e3dec5e8cf8/ 这表明32位进程不再能够访问64位进程。 可以在这做什么?

2 个答案:

答案 0 :(得分:0)

可能是,这是因为32位进程句柄是4bytes(sizeof指针),64bit进程句柄是8bytes(sizeof指针?)?如果是,32位进程句柄可能不会保持64位进程句柄。

http://social.msdn.microsoft.com/Forums/en-US/wlsearchdev/thread/9282b719-fc63-482f-bf42-398e8f03238a 希望这有帮助

答案 1 :(得分:0)

编写一个64位帮助程序,使用旧代码进行检查,并将结果作为退出代码返回。使用32位程序中的CreateProcess()运行该程序。

相关问题