我正在尝试检查从服务启动的进程是否正在运行。
问题是,我们将我们的应用程序从 Windows XP 迁移到 Windows 7。这个应用程序的一部分是服务,它启动了一些进程。另一部分是对话应用程序。此对话框应用程序尝试识别来自服务的进程是否正在运行。进程的 pid 存储在共享内存中,因此我可以OpenProcess()
从 WinApi 获取要处理的句柄,这适用于 Windows XP。如果我尝试在 Windows 7 上执行此操作,该功能会给我错误 - 访问被拒绝。
我想,我知道,为什么会这样(Windows7 中的新 0 级隔离),但我需要找到一些解决方法。
我的问题是是否可以对创建的进程设置访问权限以及如何设置(请给我一些解释示例)?
我发现,有一个参数,CreateProcess()
有一个函数SetSecurityInfo()
,但我使用这个函数的方式可能很糟糕,因为它不起作用。
要检查,如果进程正在运行,我使用
running = (WaitForSingleObject( handle, 0 ) == WAIT_TIMEOUT);
或者
BOOL result = GetExitCodeProcess(handle, (LPDWORD) &code);
if(result) {
if(code == STILL_ACTIVE) {
running = true;
}
}
wherehandle
取自OpenProcess()
函数 -OpenProcess( PROCESS_ALL_ACCESS , FALSE, pid );
我也尝试过SYNCHRONIZE
,PROCESS_QUERY_INFORMATION
和PROCESS_QUERY_LIMITED_INFORMATION
. 但总是拒绝访问..
每个想法都会有用。