0

我創建了一個Windows服務應用程序,它可以在運行Windows 8 x64的工作站上正常工作,並在OnStart()的應用程序事件日誌中寫入多個事件。我使用InstallUtil將其安裝在Windows 2012計算機上,並在啓動後立即停止。我看到在事件日誌關於它的唯一的事情就是系統下:VB.NET Windows服務適用於Win8x64,但不適用Win2012

The Foo service entered the stopped state. 
  • 我甚至無法對它進行調試這臺機器上,無需安裝VS2012,我不想這樣做,因爲它是在生產環境。
  • 應用程序依賴於一個本地複製的DLL。
  • .NET框架2.0到4.5安裝在兩臺機器上。
  • 我試圖以管理員身份運行下的兼容性,但它設置爲本地服務下運行反正所以它應該有權限做的一切它的任務是做...

編輯1:爲什麼你會downvote的問題,甚至沒有留下評論爲什麼它不好?

+0

您是否檢查過事件查看器以查看其中是否有任何信息?另一個選擇是將日誌記錄添加到您的服務中,並將其寫入文本文件 - 您可能會發現它在哪些方面失敗。 – Tim

+0

蒂姆,我在問題中提到,我的應用程序在OnStart方法中寫入了幾個事件(其中沒有一個傳遞給事件日誌(或事件查看器)),請重新閱讀。 – Theveloper

+0

對不起,我第一次錯過了。由於沒有任何事件被寫入,這給你一個地方開始尋找,看看你是否可以確定它爲什麼不起作用。將日誌記錄添加到可以記錄每個步驟的文本文件(如果您尚未記錄的話)可能會將其縮小到確實無法使用的位置。另外,請仔細檢查您的生產環境,以確保LocalService有權寫入應用程序日誌。 – Tim

回答

1

我在調試windows服務時所學到的一些東西可能會幫助您解決問題。

  1. 嘗試記錄您的Windows服務中的每個方法的所有內容到文本文件中,如Tim在評論中所建議的。
  2. 嘗試在服務退出之前通過將事件處理程序添加到appdomain來捕獲UnhandledException。我有我的日誌功能寫​​入文本文件。

    的AddHandler AppDomain.CurrentDomain.UnhandledException,AddressOf CurrentDomain_UnhandledException

    Public Sub CurrentDomain_UnhandledException(sender As Object, e As UnhandledExceptionEventArgs) 
         'Log and output exception message before the application exits. 
         Dim exp = DirectCast(e.ExceptionObject, Exception) 
         Dim formatexp = String.Format("Exception: {0}; Message: {1}: InnerException: {2}", 
              exp.ToString(), 
              exp.Message.ToString(), 
              exp.InnerException.ToString()) 
         Log(formatexp) 
         Console.WriteLine(formatexp) 
    
         Log("Application exited due to unhandled exception") 
         Console.WriteLine("Service exited due to unhandled exception") 
         'Exit the batch process gracefully. 
         Environment.Exit(-1) 
    End Sub 
    
  3. 嘗試使用WindDbg用於調試Windows服務崩潰或掛起的問題,你可以從Microsoft Download site下載。

  4. 檢查嘗試訪問服務器上的任何資源的服務帳戶是否有權訪問它們。

  5. 如果您想查看代碼的實時執行情況,請將執行記錄到SignalR主機。這可能是矯枉過正,但我​​曾經有多個線程執行不同的進程,我能夠使用SignalR調試一個問題。

注意:如果您可以發佈一些示例代碼,那麼這對我們幫助您是有幫助的。

+0

謝謝!我會給這一個鏡頭,你可以在回答中扔日誌功能嗎? – Theveloper

相關問題