从Windows服务启动WinForms应用程序

时间:2013-09-30 17:59:20

标签: c# winforms windows-services windows-server-2008

我有一个(第三方)WinForms应用程序,我需要在Windows Server上全天候运行。我的第一个想法是编写一个启动应用程序的Windows服务(使用System.Diagnostics.Process),如果崩溃或服务器重新启动,则重新启动它。

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

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

2 个答案:

答案 0 :(得分:0)

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

  1. 您需要经常发生特定行为。
  2. 它打开了一个您想要其他应用程序连接的端口。
  3. 您不希望员工退出该应用程序。
  4. 如果答案是#3,那么Windows服务不是正确的答案,你尝试的任何东西都将变成一个巨大的黑客。如果它是#1或#2,你需要考虑将你的单个应用程序分成两个。

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

答案 1 :(得分:0)

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

  

为什么不能直接从服务显示UI:这是由于某些安全实现   使用Windows Vista和更高版本的操作系统进入Windows操作系统。   Microsoft不允许直接与之交互的Windows服务   用户桌面导致某些security flaw

-

  

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

如果是这样,我认为应用程序不需要任何用户交互来继续其操作它会自己做吗?如果那样你甚至可以去command prompt exe。

  

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

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