从Windows服务启动进程

时间:2014-06-25 05:34:31

标签: c# winforms service hook

我有一个Windows窗体应用程序,旨在在后台执行特定任务。现在我想确保这个应用程序应该一直运行。 没有人能够关闭它。如果有人从任务管理器(Kill it)关闭它,那么它应该自行重启。

我有几个选择。我试图制作一个具有计时器的窗口服务,并且可以每1分钟检查一次,如果找不到进程,则它将启动该进程。但我已经阅读了几篇文章,他们说这不是一个好主意。还有其他方法可以在Windows中保持我的应用程序。

在我的想法中,如果有人关闭我的服务,那么我也无法检测我的WinForms应用程序是否已关闭或正在运行。 最好的方法是什么?我已经准备好给予最高权限,我也认为如果有人杀了我的应用程序进程,那么计算机应该自行关闭。

请分享更好的主意。

2 个答案:

答案 0 :(得分:0)

您应该知道不可能阻止任务管理器关闭您的应用程序。并且强迫用户不是一个合适的想法。

但是,如果你坚持认为我认为最好的方法是通过定时器或线程服务,以适合你的解决方案来检查其进程并运行它(如果不存在)。你在帖子中没有提到不使用这种方法的原因是什么,为什么它不是一个好方法。

希望它能帮助你做出更好的决定。

答案 1 :(得分:0)

如果您不希望用户关闭您的应用,请尽可能让他感到困难:

  • 发布最大化
  • 删除窗口的框架(并关闭,最大化,最小化按钮)
  • 启动TopMost
  • 将表单的ShowInTaskbar设置为false
  • 问10次"你确定要退出???" :)
  • 在FormClosing事件等中将e.Cancel设置为true ...

关于任务管理器:

然后,如果用户仍然设法关闭您的应用程序,您可以做互联网上的大多数人认为非常糟糕的想法并从服务启动它。只要你对风险很有说服力。

有很多资源可以告诉你如何从服务中启动交互式应用程序(显然有些人也在这样做),例如:

http://blogs.msdn.com/b/winsdk/archive/2009/07/14/launching-an-interactive-process-from-windows-service-in-windows-vista-and-later.aspx