从Windows服务启动时窗口不可见

时间:2014-08-04 10:35:01

标签: c# wpf multithreading windows-services

有一个监视给定基础结构的Windows服务。 在某些情况下,需要弹出一个表单,用户可以看到一些指标并能够做出选择。

为此我正盯着一个WPF窗口

var thread = new Thread(() =>
{

    var w = new MyWindow();
    _uis.Add(w);
    w.Info = sb.ToString();
    w.Show();

            System.Windows.Threading.Dispatcher.Run();
});

thread.SetApartmentState(ApartmentState.STA);
thread.Start();
不幸的是看不到窗户。 当我在控制台应用程序中托管我的服务业务逻辑时,我可以看到窗口。

诀窍在哪里?

3 个答案:

答案 0 :(得分:2)

服务无法访问相同的权限(网络服务/本地服务),也无法访问您的桌面。

服务本质上是通过设计保持沉默,并且根本无法启动Windows。

控制台应用程序确实具备此功能,控制台应用程序不是Windows服务,当然也可以与用户进行交互。

答案 1 :(得分:2)

您可以拆分功能:

  • 服务进行监控
  • 客户端应用程序以显示来自服务的信号

客户端应用程序可以简单地监听套接字,以获取应该向用户显示的服务消息。

服务将在机器启动时启动。该应用程序将从登录的每个用户开始。

答案 2 :(得分:1)

没有技巧。不要这样做

这种方法违反了有关服务和UI的完善实践和模式。您不应尝试直接从Windows服务显示UI(或交互式UI)。

标准做法是编写一个与Windows服务通信的独立UI应用程序。 您可以考虑定期更新UI Webservices可用于在服务和UI应用程序之间进行通信

艰难的方式

但是,如果你真的想做你最初提出的问题,那么就去吧

http://www.codeproject.com/Articles/35773/Subverting-Vista-UAC-in-Both-32-and-64-bit-Archite