2

我们有一个 windows 服务,一旦用户在 windows xp 上扫描了他们的访问卡,我们就会显示一个确认消息框,但是一旦我们迁移到 windows 7,这个弹出功能就不再起作用了。任何人都可以指导我或给我任何关于如何尽快修复此功能的想法吗?

4

2 回答 2

3

正如您所发现的,服务现在在会话 0 中运行,这是一个非交互式会话。您无法像在 XP 中那样与交互式用户的桌面进行交互。

你有几个选择:

  1. 调用WTSSendMessage以在交互式桌面上显示消息。这是相当基本的,但可能满足您的需求。如果您真的要尽快,那么这将是最快的解决方案。
  2. 除了您的服务之外,还运行标准桌面应用程序。让服务使用某种形式的 IPC(例如 WCF)与桌面应用程序通信。当服务想要显示信息时,通过您的 IPC 通道向桌面应用发送消息,并让桌面应用显示它们。
于 2013-08-30T08:52:31.923 回答
1

在 Windows XP、Windows Server 2003 和早期版本的 Windows 操作系统中,服务和应用程序在与第一个登录控制台的用户启动的会话相同的会话中运行。此会话称为会话 0,如下图所示,在 Windows Vista 之前,会话 0 包括服务和标准用户应用程序。在会话 0 中同时运行服务和用户应用程序会带来安全风险,因为服务以提升的权限运行,而用户应用程序以用户权限运行(其中大多数不是管理员)。这使得服务目标成为正在寻找机制的恶意代理通过“劫持”服务来提升自己的特权级别。

从 Windows Vista 开始,会话 0 中仅托管服务。用户应用程序与服务隔离,并在用户登录系统时创建的后续会话中运行:会话 1 用于第一个登录用户,会话 2 用于第二个登录用户,依此类推开,如下图所示。

更多详情:http: //blogs.windows.com/windows/archive/b/developers/archive/2009/10/01/session-0-isolation.aspx

您可以找到更多详细信息 - 会话 0 隔离 - http://msdn.microsoft.com/en-us/Windows7TrainingCourse_Win7Session0Isolation

于 2013-08-30T08:54:04.277 回答