有一个监视给定基础结构的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();
不幸的是看不到窗户。
当我在控制台应用程序中托管我的服务业务逻辑时,我可以看到窗口。
诀窍在哪里?
答案 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