2016-11-24 115 views
1

我們使用Main()中的try-catch-block來捕獲應用程序的所有異常,並將它們寫入到lgo文件中。在VS2012中的發佈配置中一切正常。拋出異常並將其保存到文件中。C#在安裝後不拋出異常

使用WIX創建安裝程序並安裝應用程序後,直接引發異常(並顯示爲對話框),但未被Main()中的try-catch-block捕獲,因此不再保存在文件中。我如何在Main()中發現異常?

這是Program.cs中的代碼:

[STAThread] 
    static void Main() 
    { 
     try 
     { 

      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new MainForm()); 
     } 
     catch (Exception ex) 
     { 
      ExceptionLog.SaveExceptionCloseApp(Program.RuntimeGUID, System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex); 
     } 
    } 
+0

你是什麼意思「保存到文件」?你到底在做什麼?爲我們提供一些在調試時工作的代碼,但不是在安裝之後。 –

+0

Program.cs – user2952145

+0

的附加代碼是否會發生異常,因爲一旦您通過WiX生成的MSI安裝了應用程序,安裝文件夾不包含所有必需的二進制文件?然後執行會在* Main之前失敗*,所以不會被try/catch塊捕獲。我還建議使用FusLogVw工具來檢查是否所有需要的組件都可用。 –

回答

1

這爲我們工作:
@Hans帕桑特:謝謝你的解決方案。

[STAThread] 
    static void Main() 
    {   
     Application.ThreadException += Application_ThreadException; 

     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new MainForm()); 
    } 

    static void Application_ThreadException(object sender, ThreadExceptionEventArgs e) 
    { 
     ExceptionLog.SaveExceptionCloseApp(Program.RuntimeGUID, System.Reflection.MethodBase.GetCurrentMethod().Name + "()", e.Exception); 
    }