-
27-09-2019 - |
题
我创建使用VS 2005(C#)一个winform(监控)应用程序,而现在,我有一个问题,当这个应用程序崩溃出于某种原因,我必须确保它会自动重新启动。
我怎样才能解决这个问题? (也许通过使用Windows服务应用程序?)
由于
解决方案 6
感谢你的一切,我选择的解决方案是:在主程序中我添加例外事件(UnhandledExceptionEventHandler&ThreadExceptionEventHandler见上文),在这些活动中,我重新启动程序(也把日志和电子邮件来跟踪误差)。而对于重启的问题,我在添加注册表键[HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \ Run中]我的应用程序路径,以确保我的应用程序将在Windows重新启动之后重新启动;)
其他提示
是,一个创建 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
创建一个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块调试点看其他细节等调用栈等