Csharp/C#教程:如何在Windows服务中显示表单。分享


如何在Windows服务中显示表单。

我想在我的Windows服务中加载OnStart()方法中的表单; 这是我的代码。 它不起作用。 你能帮忙吗?

protected override void OnStart(string[] args) { Form1 fr = new Form1(); fr.Show(); } 

你不能以这种方式使用服务。 服务无法直接与桌面交互,因为它们在登录用户会话中在另一台WindowsStation中运行。 您需要创建另一个与您的服务进行通信的应用程序。

如何进行通信,您可以在MSDN和此示例中阅读 。 StackOverflow上也已经描述了一些想法。

服务在不同的窗口站和桌面上运行到任何交互式用户。 即使表单成功加载,也没有人能够看到它。

您可以设置“允许服务与桌面交互”服务选项,该选项允许服务共享控制台的窗口站。 但是,这是一个非常糟糕的主意。 它打开了安全漏洞和许多其他问题。 例如,如果有多个用户登录会发生什么? 或者,如果您正在运行终端服务?

更传统的设计是让客户端应用程序处理UI并与后台运行的服务进行通信。

GUI需要单线程公寓线程模型。 表单需要一个消息泵(就像Application.Run启动的那样)。

服务绝对不是为了显示GUI(甚至交互式服务被认为是不好的做法),但它可以通过GUI进行控制。

对于显示窗口的服务,必须将其标记为“允许与桌面交互”。 这可以由服务安装程序或该服务的属性页完成。

但这并不足以让窗口可靠地显示出来。 实际上,您必须确定当前是否有用户登录并获取其桌面。 这不是一项微不足道的工作,可能成为安全问题的根源。 如果当前没有人登录,那你就不走运了。

最好的解决方案是拥有一个单独的GUI应用程序,通过某种IPC机制与服务进行通信。

上述就是C#学习教程:如何在Windows服务中显示表单。分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/955792.html

(0)
上一篇 2021年11月21日
下一篇 2021年11月21日

精彩推荐