Мы обработка ошибок вокруг нашего Windows Mobile приложения похоже на следующее:Windows Mobile Application избежать Необработанной обработки исключений
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, в основном работающих на устройствах Motorola MC65, хотя некоторые из них находятся на устройствах Psion EP10, а некоторые - на других устройствах (так что это вряд ли будет специфичным для устройства).
Все приложения используют SQLCe и Merge Replication. Многие из них используют сторонние элементы управления для отображения в формах. Все они используют определенное количество PInvoking для различных целей.
Сбой сам по себе не происходит в какой-либо конкретной точке приложения и не очень часто даже тогда, но когда мы просматриваем журналы, мы видим, что приложение регистрирует его прогресс (включая использование памяти и различные другие полезные сведения) и то он просто заканчивается без записи.
Некоторые исключения не могут быть пойманы таким образом. Включая исключения, поднятые до запуска Main(), тип исключения, для которого был назван этот веб-сайт, и исключения из неуправляемого кода, не запущенного CLR. Документируйте, что вы * знаете * об этих авариях, поэтому нам не нужно угадывать или писать книгу об этом. –