我创建使用VS 2005(C#)一个winform(监控)应用程序,而现在,我有一个问题,当这个应用程序崩溃出于某种原因,我必须确保它会自动重新启动。

我怎样才能解决这个问题? (也许通过使用Windows服务应用程序?)

由于

有帮助吗?

解决方案 6

感谢你的一切,我选择的解决方案是:在主程序中我添加例外事件(UnhandledExceptionEventHandler&ThreadExceptionEventHandler见上文),在这些活动中,我重新启动程序(也把日志和电子邮件来跟踪误差)。而对于重启的问题,我在添加注册表键[HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \ Run中]我的应用程序路径,以确保我的应用程序将在Windows重新启动之后重新启动;)

其他提示

考虑这样的:

http://msdn.microsoft.com/en-us/library/ cc303699.aspx

[DllImport("kernel32.dll")]
public static extern int RegisterApplicationRestart(
    [MarshalAs(UnmanagedType.BStr)] string commandLineArgs,
    int flags);

最低支持的服务器

在Windows Server 2008

http://msdn.microsoft.com/en -us /库/ aa373347(VS.85)的.aspx

创建一个Windows服务是有很多原因的任何长时间运行的后台进程,但是重新启动崩溃的应用程序是不是其中之一!

一个非常好的主意

您应该明白为什么应用程序崩溃和防止它发生。

通过一切手段,也是你的应用程序转换为Windows服务 - 你会看到许多好处,但解决问题的正确方法是修复应用程序崩溃摆在首位

有关* 强文本 *观察者应用程序。 您应该创建的窗口服务和代码像这样的计时器滴答事件的计时器:

        Process[] procs = Process.GetProcessesByName("you app name");
        if (procs.Length == 0)
            Process.Start("your app filename");

如果你真的不能做任何事情有关崩溃的问题,我会建议一个try-catch,而不是一个守望者。 (不要忘记重新掷办理了主要的例外)

    [STAThread]
    static void Main()
    {
        try
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
        catch(Exception ex)
        {
            //log the exception here
            Application.Restart();
        }
    }

既然你说你用你不能使用一个Windows服务应该是一个Windows窗体应用程序,因为Windows服务是不允许有一个GUI。

我会做什么,我会创建一个不可见的“看门狗”的应用程序,监视过程和崩溃时自动重新启动它。

您可以把try catch块左右,目前最可能导致崩溃的代码。然后写异常信息的日志文件。也可以设置在catch块调试点看其他细节等调用栈等

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top