我们对 Windows Mobile 应用程序进行了错误处理,类似于以下内容:
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[MTAThread]
static void Main()
{
try
{
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(OnUnhandledException);
LogWriter.WriteDebugLog("******* Application Start *******");
Application.Run(new Form1());
}
catch (Exception ex)
{
LogWriter.WriteDebugLog("LOG MAIN: " + ex.Message + "\r\nTrace: " + ex.StackTrace);
MessageBox.Show("An unexpected error has occured, please try again. If the problem continues please contact application provider.", "Fatal Error");
}
finally
{
AppDomain.CurrentDomain.UnhandledException -= new UnhandledExceptionEventHandler(OnUnhandledException);
try
{
//System.Diagnostics.Process proc = System.Diagnostics.Process.GetCurrentProcess();
//proc.Kill();
}
catch { }
LogWriter.WriteDebugLog("******* Application Exit *******");
}
}
public static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
string application_name = sender.ToString();
Exception except = (Exception)e.ExceptionObject;
string errormessage = "Application " + application_name + " [ Exception " + except.Message + " ]" + Environment.NewLine + except.StackTrace;
//MessageBox.Show(errormessage, "Fatal Error");
LogWriter.WriteDebugLog(errormessage);
AppDomain.CurrentDomain.UnhandledException -= new UnhandledExceptionEventHandler(OnUnhandledException);
}
}
尽管有这种错误处理方法,我们还是收到了来自用户的日志,其中应用程序只是终止而没有记录退出或未处理的异常或 LOG MAIN 异常。
我一直试图通过创建一个非常简单的应用程序并抛出各种类型的异常策略来杀死应用程序来重现这一点,但没有成功。每次我抛出任何类型的异常时,它似乎都会被上面的代码捕获。
如果有人对哪些类型的问题可能会跳过此错误处理有任何想法,我们将不胜感激,因为这可能会推动我们的调查向前发展。
亲切的问候,格雷厄姆。
编辑:如果它与要求相关,请提供更多信息。
有问题的应用程序是各种各样的 Windows Mobile 6.5 应用程序,主要在摩托罗拉 MC65 设备上运行,虽然有些在 Psion EP10 设备上,有些也在其他设备上(因此不太可能是特定于设备的)。
这些应用程序都使用 SQLCe 和合并复制。他们中的许多人使用第三方控件在表单上显示。他们都为不同的目的使用了一定数量的 PInvoking。
崩溃本身似乎不会在应用程序的任何特定点发生,即使在那时也不会经常发生,但是当我们查看日志时,我们会看到应用程序记录了它的进度(包括内存使用情况和各种其他有用的细节),然后它就简单地终止了没有任何记录。