2013-06-24 184 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