2016-11-24 11 views
1

Main()에서 try-catch-block을 사용하여 응용 프로그램의 모든 예외를 catch하고 lgo 파일에 기록합니다. VS2012의 릴리스 구성에서는 모든 것이 잘 작동합니다. 예외가 발생하여 파일에 저장됩니다.설치 후 C# 예외가 throw되지 않음

WIX를 사용하여 설치 프로그램을 만들고 응용 프로그램을 설치하면 예외가 직접 throw되고 대화 상자로 표시되지만 Main()의 try-catch-block으로 catch되지 않으므로 더 이상 파일에 저장되지 않습니다 . 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 블록에 의해 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); 
    }