C# 运行时错误-终止内部或外部进程

C# 运行时错误-终止内部或外部进程,c#,process,C#,Process,我有一个exe(比方说A),负责向员工发送电子邮件。 在某些情况下,可能是因为未处理某些错误,它会抛出一个运行时错误,如下面的对话框所示 MainApplication.exe中发生“System.IndexOutOfRangeException”类型的未处理异常 除非有人进入服务器并重新启动应用程序,否则它将保持原样。 我明白,通过错误处理这一点可以得到注意,但我仍然希望替代解决方案能够自动终止此过程并重新启动它 我制作了另一个应用程序B-System.Diagnostics.Process=

我有一个exe(比方说A),负责向员工发送电子邮件。 在某些情况下,可能是因为未处理某些错误,它会抛出一个运行时错误,如下面的对话框所示

MainApplication.exe中发生“System.IndexOutOfRangeException”类型的未处理异常

除非有人进入服务器并重新启动应用程序,否则它将保持原样。 我明白,通过错误处理这一点可以得到注意,但我仍然希望替代解决方案能够自动终止此过程并重新启动它

我制作了另一个应用程序B-System.Diagnostics.Process=new System.Diagnostics.Process(); process.StartInfo.FileName=@“…\MainApplication.exe”

我试图找出是否发生了任何运行时错误,然后我可以终止进程并重新启动它

1) exe代码中是否有任何规定可以终止进程本身并自动删除此对话框? 2) 如果不可能,那么可以使用其他应用程序B来捕获和终止进程

任何其他建议也欢迎!
感谢您的帮助。

如果
A.exe
是Windows服务(即在.NET中实现其主类派生自),则您可以将其配置为由系统自动重新启动。(请参阅
services.msc
中服务属性的恢复选项卡)

对于在Windows中长期运行的任何东西,服务都是最好的方法,但如果不是这样编写的,则可能需要大量重写

备选方案:

  • 使用计划程序运行某些内容,查看
    A.exe
    是否正在运行,如果没有,则启动它。如果在任何时候只有一个
    A.exe
    实例,这是最简单的
  • A.exe的最后一个(最外层)异常处理程序中,在退出(并记录失败)之前启动一个新实例

但是,这两种方法都应该被视为有待实现为服务的变通方法。

看门狗的问题是,它们本身很容易失败。若您在应用程序A中遇到未处理的异常,那个么是什么让您认为您不会在应用程序B中遇到相同的条件

您应该研究的是正确地钩住未处理的异常事件:

处理这些事件的正确方式,以及哪个事件适用于哪个案例,是一个相当冗长的话题。阅读以上链接了解更多详细信息。也可以读到


通过捕获这些未处理的异常,可以通过显式退出来抑制默认对话框行为。传统上也有一个注册表项,请参阅,但挂接未处理的异常处理程序事件是一种更好的方法。

感谢各位的宝贵意见。非常感谢Richard,您是对的,它必须在服务器下运行。我会这样做,以及永久解决方案。有一件事要考虑这些(否则)非手的例外是为什么他们发生:过程的状态仍然有效吗?除非清除所有相关状态,否则在异常发生后,您可能正在执行任何操作。在最好的情况下,您将隐藏小缺陷,在最坏的情况下,您将破坏有效状态。