使用.NET Windows服务显示消息框在Windows 7中

我们有一个Windows服务,用来显示一个确认消息框,一旦用户在Windows XP上扫描他们的访问卡,但一旦我们迁移到Windows 7,popupfunction不再起作用。 任何人都可以请指导我通过或给我任何想法如何着手解决这个functionasap?

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

你有几个选择:

  1. 调用WTSSendMessage在交互式桌面上显示消息。 这是相当基本的,但可能会满足您的需求。 如果你的意思是尽快的话,那么这将是最快的解决方案。
  2. 除了服务之外,还运行标准的桌面应用程序。 让服务使用某种形式的IPC与桌面应用程序进行通信,例如WCF。 当服务想要显示信息时,通过IPC通道将消息发送到桌面应用程序,并让桌面应用程序显示它们。

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

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

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

您可以找到更多的细节-Session 0隔离 – http://msdn.microsoft.com/en-us/Windows7TrainingCourse_Win7Session0Isolation