我有一个(第 3 方)WinForms 应用程序,我需要在 Windows Server 上保持 24/7 全天候运行。我的第一个想法是编写一个 Windows 服务来启动应用程序(使用System.Diagnostics.Process
)并在它崩溃或服务器重新启动时重新启动它。
这甚至可能吗?即使没有用户在服务器上登录,我也需要启动它。没有人登录时可以运行具有用户界面的应用程序吗?如果没有,是否有解决方法?
注意我不需要以任何方式与应用程序交互,我只需要启动它。
我有一个(第 3 方)WinForms 应用程序,我需要在 Windows Server 上保持 24/7 全天候运行。我的第一个想法是编写一个 Windows 服务来启动应用程序(使用System.Diagnostics.Process
)并在它崩溃或服务器重新启动时重新启动它。
这甚至可能吗?即使没有用户在服务器上登录,我也需要启动它。没有人登录时可以运行具有用户界面的应用程序吗?如果没有,是否有解决方法?
注意我不需要以任何方式与应用程序交互,我只需要启动它。
我建议你考虑一种不同的方法。尝试通过 Windows 服务向用户显示 GUI 并不是一件容易的事,我遇到了类似的情况,最后我不得不采用不同的方法。
为什么不能直接从 Service 显示 UI:这是由于 Windows Vista 和更高版本的 Windows 操作系统中的一些安全实施。微软不允许 Windows 服务直接与用户桌面交互,因为这会导致一些安全漏洞
-
我不需要以任何方式与应用程序交互
如果是这样的话,我假设应用程序不需要任何用户交互来继续它的操作它会自己做吗?如果那时你甚至可以去一个command prompt
exe。
即使没有用户在服务器上登录,我也需要启动它
我强烈建议您使用Windows Task Scheduler。这将使您的生活更加轻松。它不需要任何用户手动启动程序,它可以在计算机启动/重新启动时启动您的程序,甚至您可以安排在特定时间间隔运行您的程序。您还可以查看其他好的 .net 任务调度库,quartznet就是其中之一。
为什么需要保持表单 24/7 全天候运行?以下是我可以想象的一些可能性。
如果答案是#3,那么 Windows 服务就不是正确的答案,你尝试的任何东西都会变成一个巨大的黑客。如果它是#1 或#2,您需要考虑将您的单个应用程序分成两个。
对于重复任务,最简单的解决方案是开发控制台应用程序并在 Windows 任务计划程序中设置任务。这比 Windows 服务更容易管理和调试。如果您尝试运行某种套接字服务,典型的方法是创建一个没有 GUI 的应用程序,并且访问它的唯一方法是通过套接字连接。如果 WinForm 关闭,则套接字服务会继续运行,并且 WinForm 可以在重新打开时获取最新信息。