2016-11-24 10 views
1

Main()でtry-catch-blockを使用して、アプリケーションのすべての例外を捕捉し、lgoファイルに書き込んでいます。 VS2012のリリース構成ではすべて正常に動作します。例外はスローされ、ファイルに保存されます。C#インストール後に例外がスローされない

WIXを使用してインストーラを作成し、アプリケーションをインストールすると、例外が直接スローされ(ダイアログとして表示されますが)、Main()のtry-catch-blockでキャッチされず、 。 Main()で例外をキャッチするにはどうすればよいですか?

[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アンパッサン:

この

はProgram.csの内のコードで解決策をありがとうございました。

[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); 
    } 
関連する問題