【发布时间】:2015-02-17 16:39:29
【问题描述】:
我正在尝试检查从服务启动的进程是否正在运行。
问题是,我们将应用程序从 Windows XP 迁移到 Windows 7。该应用程序的一部分是启动一些进程的服务。另一部分是对话应用程序。此对话框应用程序尝试识别来自服务的进程是否正在运行。
进程的 pid 存储在共享内存中,因此我可以使用 WinApi 中的OpenProcess() 获取要处理的句柄,这适用于 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;
}
}
其中handle 取自OpenProcess() 函数-OpenProcess( PROCESS_ALL_ACCESS , FALSE, pid ); 我也尝试过使用SYNCHRONIZE、PROCESS_QUERY_INFORMATION 和PROCESS_QUERY_LIMITED_INFORMATION。但总是拒绝访问..
每个想法都会有用。
【问题讨论】:
标签: c windows createprocess openprocess