2013-06-24 183 views
0

我有一個使用C#編寫的Windows服務,並使用installUtil.exe實用程序安裝在我的機器上。安裝成功完成後,我正在嘗試啓動該服務。但它給了我一個1053錯誤。Windows服務啓動失敗

現在真正奇怪的是,當我刪除配置文件服務啓動就好(雖然然後停止,因爲空指針異常,這是預期的,因爲沒有配置文件)。

對此有何見解?我在這裏損失了,我在同一臺機器上安裝了另一項服務,它工作得很好。

注意:操作系統是Windows 7中的OnStart()方法家庭高級版64位

編輯=======

爲了明確這一點,我試圖登錄(使用事件查看器)。當日志文件被刪除時,我可以看到所有的日誌條目和服務工作正常,直到它需要從配置文件中獲取數據。

問題似乎是當配置文件仍然存在。 OnStart()方法的第一行做了一個日誌條目,但是,該程序沒有達到這一點。

protected override void OnStart(string[] args) 
    { 
     try 
     { 
      this.EventLog.WriteEntry("Starting Focus Stock Service"); 

該日誌條目被記錄只在配置文件是不是

編輯2 ========================否則就不會達到這一點。

> <?xml version="1.0"?> <configuration> <appSettings> 
>  <add key="Directory" value="C:\Logs\FocusCommon"/> 
>  <add key="FileName" value="log"/> 
>  <add key="LogLevel" value="3"/> 
>  <add key="StockRemotingServerPort" value="10001"/> 
>  <add key="StockRemotingServerName" value="FocusStockServer"/> 
>  <add key="SQLServerConnStringTemplate" value="server=$server$;uid=$username$;pwd=$password$;database=$database$;MultipleActiveResultSets=True;Pooling=False;"/> 
>  <add key="AccountingSynchIntervalMinutes" value="1"/> 
>  <add key="LocalImageDirectory" value="C:\Focus360_Image_Dir"/> 
>  <add key="LocalBrandImageDirectory" value="C:\Focus360_Image_Dir\Brands"/> 
>  <add key="LocalAttachmentDirectory" value="C:\Focus360_Attachment_Dir"/> 
>  <add key="EmailServer" value="maltanet.net" /> 
>  <add key="EmailPort" value="25" /> 
>  <add key="EmailUserName" value="" /> 
>  <add key="EmailPassword" value="" /> 
>  <add key="EmailUseSSL" value="false" /> </appSettings> 
<runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <dependentAssembly> 
       <assemblyIdentity name="FSS_SQLConnPool" publicKeyToken="40FEE7F833FAA042" culture="neutral"/> 
       <bindingRedirect oldVersion="0.0.0.0-1.0.4525.28539" newVersion="1.0.4525.28539"/> 
      </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration> 
+0

聽起來好像在這兩種情況下服務中都會拋出一些運行時異常。你有什麼機會找出這些是什麼?您可能需要向代碼添加一些錯誤日誌記錄並重新部署以獲取更多有用的信息。但在這方面,異常類型,異常消息和堆棧跟蹤非常有用。 – David

+0

是的,我使用事件查看器進行日誌記錄,但是在配置文件未被刪除的情況下,它似乎沒有調用OnStart()方法。刪除配置文件後,我看到日誌條目。 – Jonny

+0

當配置文件被刪除時,它停止了,但那是因爲它沒有找到配置文件。所以看起來配置文件是問題 – Jonny

回答

1
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup> 

好吧,這似乎是問題所在。我不完全確定爲什麼這會阻止它從我的機器上啓動。 (是的,我試過其他兩臺機器,並啓動該服務就好了!)

反正我刪除這條線和服務在我的機器上啓動也是如此。

+0

你救了我整整一天,非常感謝:) – Sumit

2

這是一個的事情,當你啓動一個服務,比普通的崩潰等可能出錯。您的OnStart()方法有30秒完成作業並返回。如果服務控制管理器需要更長的時間,那麼服務控制管理器會認爲存在嚴重錯誤,停止等待服務啓動併產生錯誤1053,「服務沒有及時響應啓動或控制請求」。

您可以通過調用RequestAdditionalTime()來請求額外的時間。但是有一些可能性,你的OnStart()代碼有一些基本錯誤,30秒的啓動時間相當長。通過改進代碼中的日誌記錄來提高診斷此問題的機率,以便您知道它卡住的位置。

+0

沒有配置文件服務立即啓動並登錄OnStart方法不起作用(與配置文件存在)。它看起來像OnStart方法根本沒有被調用 – Jonny

+0

一個配置文件有很多權限,但是阻止OnStart運行不是其中之一。我假設你的代碼實際上使用配置文件中的一個設置,將它發送到lala-land。不知道爲什麼我必須猜測配置文件中有什麼,但是你沒有幫助我幫助你。獲得服務工作的一般策略是首先確保它作爲控制檯模式應用程序是完美的,其中您的Main()方法執行OnStart()所做的事情。 –

+0

檢查編輯 – Jonny