gpt4 book ai didi

winapi - Windows XP 和 Windows 7 中事件对象的不同行为

转载 作者:行者123 更新时间:2023-12-02 02:25:24 24 4
gpt4 key购买 nike

在我的 C++/winapi 程序中,我使用一个事件对象来检测我的应用程序的一个实例是否已经在运行,以便不让第二个实例启动。

但与此同时,如果程序的多个实例是使用不同的用户帐户启动的,我想允许它们运行。例如。使用“runas”命令。(即:对于每个用户帐户只能同时运行 1 个实例)

我使用的代码如下所示:

HANDLE hSingleInstance=OpenEvent(EVENT_MODIFY_STATE,FALSE,
"Local\\SingleInstanceEventName");
if(hSingleInstance!=NULL) {
// there is an instance already running
SetEvent(hSingleInstance);// let know the 1st instance that we are trying to start
CloseHandle(hSingleInstance);
return 0; // exit the program
}
else {
// this is the 1st instance
hSingleInstance=CreateEvent(NULL,FALSE,FALSE, "Local\\SingleInstanceEventName");
}

它在 XP 中按预期工作 - 我只能使用相同的用户帐户运行 1 个实例,并且我可以使用多个用户帐户运行多个实例。

但在 Windows 7 中,OpenEvent() 函数总是“找到”我的事件对象,即使事件对象是使用另一个用户帐户创建的。因此,我无法使用不同的用户帐户运行多个实例(根据需要)。

我应该在我的代码中更改什么以允许在 Windows 7 中使用不同的用户帐户运行多个实例?或者我的方法完全错误,那么哪种方法是正确的?

谢谢

最佳答案

您所要做的就是以某种方式在事件名称中包含用户名。坦率地说,我对您的方案在 XP 中运行感到有点惊讶。

关于winapi - Windows XP 和 Windows 7 中事件对象的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6145159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com