C# 永久运行的可执行文件
我使用VS2005(c#)创建了一个winform(监控)应用程序,现在,当这个应用程序由于某种原因崩溃时,我遇到了一个问题,我必须确保它会自动重新启动 我如何解决这个问题?(可能通过使用windows服务应用程序?) 谢谢考虑一下: 支持的最小服务器数 Windows Server 2008 是的,创建a将起作用,因为您可以设置它在崩溃时自动重新启动,但更好的方法是首先防止它崩溃!它崩溃有具体原因吗C# 永久运行的可执行文件,c#,winforms,windows-services,permanent-generation,C#,Winforms,Windows Services,Permanent Generation,我使用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();
}
}