从 Windows Service 启动 WinForms 应用程序

本文关键字:WinForms 应用程序 启动 Service Windows | 更新日期: 2023-09-27 18:33:17

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

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

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

从 Windows Service 启动 WinForms 应用程序

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

  1. 您需要每隔一段时间发生一次特定的行为。
  2. 它正在打开您希望其他应用程序连接到的端口。
  3. 您不希望员工能够退出应用程序。

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

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

我建议你考虑一种不同的方法。 尝试通过Windows服务向用户显示GUI并非易事,我遇到了类似的情况,最后我不得不采用不同的方法。

为什么你不能直接从服务显示UI:这是由于一些安全实现 使用Windows Vista和更高版本的操作系统进入Windows操作系统。 Microsoft不允许 Windows 服务直接与 用户桌面,因为它导致了一些安全漏洞

-

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

如果是这种情况,我假设应用程序不需要任何用户交互即可继续其操作,它将自己做? 如果那样,您甚至可以选择command prompt exe。

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

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