我有一个用C#编写的Windows服务,并使用installUtil.exe实用程序安装在我的机器上。安装成功完成后,我正在尝试启动该服务。但它给我一个1053错误。
现在真正奇怪的是,当我删除Config文件时,服务启动就好了(虽然它因为空指针异常而停止,因为没有配置文件,这是预期的。)
对此有何见解?我在这里失去了我在同一台机器上安装了另一项服务,工作正常。
注意:操作系统是Windows 7 Home Premium x64
编辑=======
为了说清楚,我尝试在OnStart()
方法中记录(使用事件查看器)。删除日志文件后,我可以看到所有日志条目,并且服务正常工作,直到需要从配置文件中获取数据。
问题似乎是配置文件仍然存在时。 OnStart()
方法的第一行创建了一个日志条目,但是,程序没有达到这一点。
编辑2 ========================
protected override void OnStart(string[] args)
{
try
{
this.EventLog.WriteEntry("Starting Focus Stock Service");
仅当配置文件不存在时才会记录此日志条目,否则它将无法到达此点。
> <?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 :(得分:2)
这是一个在启动服务时可能出错的事情,除了它崩溃之外。您的OnStart()方法有30秒完成作业并返回。如果需要更长时间,则服务控制管理器会认为存在严重错误,停止等待服务启动并产生错误1053,“服务未及时响应启动或控制请求”。
您可以通过调用RequestAdditionalTime()来请求额外的时间。但是,你的OnStart()代码存在一些基本错误的可能性,30秒相当长的时间才能启动服务。通过改进代码中的日志记录来提高诊断此问题的几率,以便您知道它被卡住的位置。
答案 1 :(得分:1)
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
好的,这似乎是个问题。我不完全确定为什么这会阻止它在我的机器上启动。 (是的,我尝试了另外两台机器,服务开始就好了!)
无论如何我删除了这一行,服务也在我的机器上启动了。