0

这是一个编码问题。请在将其标记为属于 ServerFault 之前阅读它,因为我写的最后一个在不到 5 分钟内就被扔到了那里。

我正在 XP 上测试我的 win32/c++ 应用程序,它具有最新的服务包。它包含两个没有密码的管理用户帐户。我以 User1 身份登录并启动我的应用程序。该应用程序运行,它的主窗口出现,一切都很好。然后我在没有先关闭我的应用程序的情况下注销 User1。是的,我使用“注销”而不是“切换用户”

然后我以 User2 身份登录,我的应用程序仍在运行。我在 User 2 桌面上看到它,我什至可以与它进行交互。它似乎运行正常。任务管理器显示它以 User1 身份运行。

有什么想法可能在这里发生吗?其他应用程序(如记事本)没有出现这个问题,但我的有。在我看来,我的代码做错了,但它确实是一个相当标准的 win32/c++ 应用程序。也许我没有正确处理一些关机消息?很抱歉,我现在不能提供更多细节。我真的希望能找到一些线索来引发进一步的研究。

4

3 回答 3

1

您确定您的应用程序没有作为服务运行吗?具有“与桌面交互”的服务可能如下所示。

更新:它必须以某种方式与服务相关。在注销完成之前,在会话中运行的普通应用程序将被 Windows 强制关闭。即使您不处理结束会话消息,Windows 也会告诉用户有关无响应进程和/或干脆杀死它。

于 2009-07-15T18:46:36.547 回答
1

检查 Windows 任务管理器的两件事:

  1. “会话 ID”列
    • “用户名”列

如果这些列中的任何一个未显示,则从 View -> Select columns 中选择它们。

检查您的应用程序保持打开状态的用户名和会话处于打开状态。然后去启动 notepad.exe 并与启动它的会话 ID 和用户名进行比较。

当您注销时,它将关闭在您的会话 ID 和用户名下运行的应用程序。

我猜您的应用程序正在它自己的会话 ID 和/或用户名中运行。

当您使用其他用户登录时,它会检查它是否可以重新使用已为新用户名启动的会话。这就是为什么当您使用第二个用户登录时会看到它再次运行的原因。

于 2009-07-15T20:14:21.300 回答
0

您是否需要监听关机或注销事件?

查看此答案以获取类似问题。

该答案是指监听 WM_QUERYENDSESSION。

请参阅WM_QUERYENDSESSION 消息

于 2009-07-15T18:48:03.893 回答