Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 永久运行的可执行文件_C#_Winforms_Windows Services_Permanent Generation - Fatal编程技术网

C# 永久运行的可执行文件

C# 永久运行的可执行文件,c#,winforms,windows-services,permanent-generation,C#,Winforms,Windows Services,Permanent Generation,我使用VS2005(c#)创建了一个winform(监控)应用程序,现在,当这个应用程序由于某种原因崩溃时,我遇到了一个问题,我必须确保它会自动重新启动 我如何解决这个问题?(可能通过使用windows服务应用程序?) 谢谢考虑一下: 支持的最小服务器数 Windows Server 2008 是的,创建a将起作用,因为您可以设置它在崩溃时自动重新启动,但更好的方法是首先防止它崩溃!它崩溃有具体原因吗 有了良好的错误处理和报告功能,您可以编写它,这样它就可以简单地报告发生和继续发生的任何错误,

我使用VS2005(c#)创建了一个winform(监控)应用程序,现在,当这个应用程序由于某种原因崩溃时,我遇到了一个问题,我必须确保它会自动重新启动

我如何解决这个问题?(可能通过使用windows服务应用程序?)

谢谢

考虑一下:

支持的最小服务器数

Windows Server 2008

是的,创建a将起作用,因为您可以设置它在崩溃时自动重新启动,但更好的方法是首先防止它崩溃!它崩溃有具体原因吗


有了良好的错误处理和报告功能,您可以编写它,这样它就可以简单地报告发生和继续发生的任何错误,这是最好的方法。创建Windows服务对于任何长时间运行的后台进程来说都是一个非常好的主意,原因有很多,但是重新启动崩溃的应用程序并不是其中之一

您应该找出应用程序崩溃的原因并防止其发生


无论如何,也要将应用程序转换为Windows服务-您将看到许多好处,但是解决问题的正确方法是首先修复应用程序崩溃。

既然您说您使用的是Windows窗体应用程序,您就不能使用Windows服务来解决这个问题,因为Windows服务不允许有GUI


我要做的是创建一个不可见的“看门狗”应用程序,它监视进程并在进程崩溃时自动重新启动它。

您可以在最有可能导致崩溃的代码周围放置一个try-catch块。然后将异常消息写入日志文件。您还可以在catch块中设置调试点,以查看其他详细信息,如调用堆栈等。

对于*strong text*watcher应用程序。 您应该在windows服务上创建一个计时器,并在timer tick事件中编写如下代码:

        Process[] procs = Process.GetProcessesByName("you app name");
        if (procs.Length == 0)
            Process.Start("your app filename");
如果你真的对撞车问题无能为力的话,我建议你试试看而不是看。(别忘了重新抛出已处理的主要异常)


谢谢大家,我选择的解决方案是:在主程序中,我添加一个异常事件(未处理的ExceptionEventHandler和ThreadExceptionEventHandler,见上文),在这些事件中,我重新启动程序(同时放置日志和电子邮件以跟踪错误)。对于重新启动问题,我在[HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]中添加注册表项和我的应用程序路径,以确保在Windows重新启动后重新启动我的应用程序;)

+1:对于首先尝试找出它崩溃原因的建议!当我说可能崩溃时,未处理的异常!!或者windows崩溃并重新启动,我必须确保我的应用程序始终处于运行状态running@bidak:使用Try/catch来处理未处理的异常,并在重新启动后启动应用程序,请在“开始”菜单的“启动”文件夹中放置一个快捷方式。请不要忘记,这至少需要Vista/Windows Server 2008。我现在已经赢得了XP,但是如果存在外部问题(windows崩溃),我的应用程序如何重新启动(在windows重新启动后)?对于旧版本的windows,您可以使用自己的Secoronal exe监视主应用程序。如何将我的应用程序转换为windows服务?我已将此添加到我的应用程序中:application.ThreadException+=new ThreadExceptionEventHandler(application\u ThreadException);AppDomain.CurrentDomain.UnhandledException+=新的UnhandledExceptionEventHandler(CurrentDomain\u UnhandledException);在这些函数中,我重新启动应用程序,但如果是windows问题(内存泄漏,…),我无法在我的应用程序中检测到windows系统触发的问题。谢谢,我将看到windows服务示例。您可以使用ants检测内存泄漏:谢谢大家,我选择的解决方案是:在主程序中,我添加了一个异常事件(未处理的ExceptionEventHandler&ThreadExceptionEventHandler,见上文),在这些事件中,我重新启动程序(同时放置日志和电子邮件以跟踪错误)。对于重新启动问题,我在[HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]中添加注册表项和我的应用程序路径,以确保在Windows重新启动后重新启动我的应用程序;)
        Process[] procs = Process.GetProcessesByName("you app name");
        if (procs.Length == 0)
            Process.Start("your app filename");
    [STAThread]
    static void Main()
    {
        try
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
        catch(Exception ex)
        {
            //log the exception here
            Application.Restart();
        }
    }