繁体   English   中英

从Windows服务启动WinForms应用程序

[英]Start WinForms application from Windows Service

我有一个(第三方)WinForms应用程序,我需要在Windows Server上保持24/7实时运行。 我的第一个想法是编写一个Windows服务,该应用程序将启动应用程序(使用System.Diagnostics.Process ),并在应用程序崩溃或服务器重新启动时重新启动它。

这有可能吗? 即使服务器上没有用户登录,我也需要启动它。 没有人登录时,具有用户界面的应用程序可以运行吗? 如果没有,是否有解决方法?

注意:我不需要以任何方式与应用程序交互,只需要启动它即可。

为什么需要保持24/7全天候运行的表单? 我可以想象这是一些可能性。

  1. 您需要经常执行特定的行为。
  2. 它正在打开一个端口,您希望其他应用程序连接到该端口。
  3. 您不希望员工能够退出该应用程序。

如果答案是#3,则Windows服务不是正确的答案,您尝试做的任何事情都将变成一个巨大的黑客。 如果是#1或#2,则需要考虑将单个应用程序分为两个。

对于重复执行的任务,最简单的解决方案是开发控制台应用程序并在Windows Task Scheduler中设置Task。 这比Windows服务更容易管理和调试。 如果您尝试运行某种套接字服务,那么典型的方法是创建一个没有GUI的应用程序,唯一的访问方法是通过套接字连接。 如果WinForm关闭,套接字服务将继续运行,并且WinForm在重新打开时可以获取最新信息。

我建议您考虑另一种方法。 试图通过Windows服务向用户显示GUI并不是一件容易的事,我遇到了类似的情况,最后我不得不采用另一种方法。

为什么不能直接从Service中显示UI :这是由于Windows Vista和更高版本的Windows OS中引入了一些安全性实现。 微软禁止Windows服务直接与用户桌面进行交互,因为它导致了一些安全漏洞

-

我不需要以任何方式与应用程序进行交互

如果是这样,我认为应用程序不需要任何用户交互即可继续其操作,它将自己进行操作? 如果是的话,甚至可以使用command prompt exe。

即使服务器上没有用户登录,我也需要启动它

我强烈建议您使用Windows Task Scheduler 这将使您的生活更加轻松。 它不需要任何用户手动启动程序,它可以在计算机启动/重新启动时启动您的程序,甚至您可以计划在特定的时间间隔运行程序。 您也可以检查其他好的.net任务调度库, quartznet是其中之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM