从窗口服务显示窗体

Ars*_*had 3 c# windows-services winforms

我正在创建一个窗口服务.我的要求是在特定的时间间隔内从窗口NT服务显示窗口表单.出于测试目的,我只想在服务启动时显示表单:

 protected override void OnStart(string[] args)
        {
            eventLog1.WriteEntry("In OnStart -before form show");

            Messager_Form obj = new Messager_Form();
            obj.Show();
           // System.Diagnostics.Process.Start("calc.exe");
            eventLog1.WriteEntry("In OnStart -after form show");
           // timer1.Start();
        }
Run Code Online (Sandbox Code Playgroud)

它不起作用.两种形式都没有显示,也没有计算过程正在运行.我发现一些链接 显示弹出,但大多数建议WCF.没有wcf是不可能的.任何人都可以告诉我实现这一目标的方法.

Jus*_*tin 6

不能做*.在以后不能作为Windows服务工作的操作系统中,不允许与桌面交互 - 而是由Windows服务提供的UI显示在会话0中,这是一个特殊的登录会话,通常对最终用户不可见.

您应该做的是编写一个单独的Windows窗体应用程序,该应用程序始终在运行,但并不总是可见(可能在启动时运行该应用程序并在通知区域中有一个图标)并使用某种形式的IPC与Windows服务进行通信

当Windows服务希望向用户显示一些UI时,它会向应用程序发送一条消息,然后该消息向最终用户显示所需的UI.

**或者至少它绝对不应该*

  • 如果有人登录@Tommy除了它只能运行.你既需要服务(做繁重的任务,即使没有人登录),和桌面应用程序执行通知,不管是谁登录.它更有意义这样,特别是考虑到多重会话时 - 如果有多个用户登录,那么哪个用户应该从服务中显示用户界面? (3认同)