2013-09-30 38 views
2

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

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

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

回答

0

为什么你需要保持一个表格24/7运行?这是我能想象的一些可能性。

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

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

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

+0

的应用程序是不大不小的数据采集平台。它从多个来源(tcp,rs232等)收集数据并将其保存在数据库中。我没有这个应用程序的源代码,所以我不能以任何方式操作它,我只能启动它。我需要确保它始终在运行。 – Joel

+0

@Joel - 那么你在那条小溪上呢。 Windows服务不是为基于表单的应用程序设计的。 –

+0

是的,这就是我正在意识到的....我只是希望有一种方法可以在没有用户“分配”的情况下启动应用程序 – Joel

0

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

你为什么不能直接显示从服务 UI:这是由于一些安全实施 进入Windows操作系统,与Windows Vista和更高操作系统版本。 微软不允许Windows服务在直接与 用户桌面交互,因为它导致了一些security flaw

-

我不需要以任何方式

与应用程序交互

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

我需要即使没有用户登录到服务器

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

+0

感谢您的回答,但我在其他答案的评论说,我没有应用程序的源代码,所以我不能做任何更改。使用Windows任务计划程序问题,正如我所看到的,是没有办法监视和检测应用程序是否崩溃,然后重新启动它。或者我错了吗? – Joel

+0

@Joel您可以设置启动应用程序的时间间隔,并且还有一个属性设置,只有在程序没有运行时才会启动程序,所以如果程序在时间间隔结束时崩溃,并且程序没有运行,程序会再次启动。 – Kurubaran