2016-05-04 78 views
0

我編寫了一個控制檯應用程序和一個伴隨類庫,用於從雲服務中導出一些數據。該應用程序由SQL Server Integration Services調用,它依賴於應用程序返回的退出代碼來確定它是否正常工作。來自.NET控制檯應用程序的意外退出代碼

間歇性地應用程序返回一個退出代碼-532462766(0xE0434352),它是.NET未處理的異常的通用錯誤代碼。至於爲什麼會發生,我完全不知所措。

應用程序生成的日誌文件不顯示任何問題,並且它們看起來像所有內容都已成功完成。

應用程序事件查看器日誌中沒有條目。

應用程序甚至有未處理的異常處理程序:

AppDomain.CurrentDomain.UnhandledException += UnhandledErrorHandler; 
... 
private void UnhandledErrorHandler(object sender, UnhandledExceptionEventArgs e) { 
    logWriter.Write(e.ExceptionObject.ToString(), logLevel.Fatal); 
    logWriter.Write("Exiting now...", logLevel.Fatal); 
    Dispose(); 
} 

我甚至寫了一個批處理文件來執行應用程序,並且在傳遞到SSIS之前登錄的退出代碼。 SSIS正在收到的退出代碼似乎是應用程序返回的代碼。但我無法在任何地方看到未處理的異常。

class Program { 
    static int Main(string[] args) { 

    ... 

    return (Success) ? 0 : 1; 
} 

由於是間歇(以及數據提取可以採取幾個小時)我不能只運行它在Visual Studio中:

控制檯應用程序通過定義Main()像這樣返回退出代碼並調試它。我懷疑它可能與應用程序運行了這麼長時間的事實有關,但我似乎無法證實這一點。

還有什麼可以導致.NET應用程序返回該退出碼嗎?我在排除故障時錯過了什麼嗎?

+0

也許[此](http://stackoverflow.com/questions/14711633/my-c-sharp-application-is-returning-0xe0434352-to-windows-task-scheduler-but-it)帖子和答案可以幫助你。是否可以註釋掉代碼的某些部分來查明問題?你是否也部署PB文件以獲得更多信息,並且你是否已經排除了內存問題? –

+0

謝謝Jeroen,但我看到了這個問題,不幸的是它沒有幫助,因爲我已經有一個未處理的異常處理程序,並且應用程序事件查看器日誌中沒有條目。我會嘗試部署PDB文件,看看是否能給我任何額外的信息。 –

回答

2

快速檢查:將您的整個代碼包裝在try catch塊中並將該異常保存在日誌文件中。

static int Main(string[] args) 
{ 
    try 
    { 

      //your existing code.... 

    } 
    catch(Exception Ex) 
    { 
     //write your log results here. 

    } 
} 
+0

不要忘記登錄內部例外 –

0

檢查您是否使用多個應用程序域。當在AppDomain B中引發異常X時,我遇到了同樣的問題,因爲它不可序列化,所以無法跨AppDomain A.參見best practices for exceptions(搜索「跨應用程序域」):

當您創建用戶定義的異常,則必須確保爲例外 元數據可用代碼被遠程執行 ,包括當異常跨應用程序域發生。例如,對於 示例,假設應用程序域A創建應用程序域B,該域執行引發異常的代碼 。爲了正確捕捉應用程序域A並且 處理該異常,它必須能夠找到包含應用程序域B拋出的異常的程序集。如果應用程序域B拋出 程序中包含的異常,其應用程序 但不在App Domain A的應用程序庫下,App Domain A將 無法找到該異常,並且公共語言運行庫 將引發FileNotFoundException異常。爲了避免這種情況, 可以部署包含 兩方面異常信息彙編:

  • 將組裝成 兩個應用程序域共享一個共同的應用基礎。

  • 如果域不共享一個公共應用基礎,簽署包含強名稱 異常信息的組裝和裝配部署到全局程序集緩存。
+0

感謝您的信息!這非常有用。我已經在鏈接的頁面添加了相關的引用,這是StackOverflow上推薦的過程。鏈接可以改變,頁面可以被刪除,所以我們試圖在這裏保留一份信息的副本。當然,仍然提供鏈接和歸因到來源。這是一個有用的發現。 –

+0

感謝您的編輯! –

相關問題