安装

2011-06-09 64 views
3

我在ASP.NET 4.0中创建一个Windows服务Windows服务,我使用下面的命令来安装该服务启动命令提示符以管理员身份后:安装

C:\Windows\system32>sc create EnviroTracker1 binpath= "D:\Freelance Work\SuperExpert\git EnviroTrack\EnviroTrack\EnviroTrackerService\bin\Release\EnviroTrackService.exe"

[SC] CreateService SUCCESS

在那之后,我去管理工具 - >服务,并尝试启动该服务,但我发现了以下错误:

--------------------------- 

Services

--------------------------- 

Windows could not start the EnviroTracker1 service on Local Computer.

Error 1053: The service did not respond to the start or control request in a timely fashion.

--------------------------- 

OK

--------------------------- 

我也试过installutil。在这种情况下,服务已安装,其启动类型是自动的,服务属性窗口中的服务状态是自动的。请给我一个解决方案。

谢谢。

+0

听起来像您的服务已安装,但服务尝试启动时会引发异常。 – Mutt 2011-06-09 17:32:23

+0

在你的OnStart方法中有很多功能?事件查看器中没有错误? – 2011-06-09 18:07:08

回答

1

您将需要一个派生自ServiceBase的类,并将代码添加到OnStartOnStop方法中。一旦你得到了这个工作,你可以在设计器视图中的任何地方右键单击,然后选择“添加安装程序”,这将添加必要的代码到程序集中,允许installutil注册该服务。

public class YourService : ServiceBase 
{ 
    public static void Main(string[] args) 
    { 
    ServiceBase.Run(new ServiceBase[] { new YourService() }); 
    } 

    protected overrides void OnStart(string[] args) 
    { 
    // Add code to start your logic here. Try to return immediately. 
    } 

    protected overrides void OnStop() 
    { 
    // Add code to stop your logic here. 
    } 
} 

这可能是在OnStart方法,则需要等待太久返回。你需要确保你只做足够的工作来获得服务的逻辑启动。这意味着你可能不得不启动一个新线程或以其他方式异步启动你的逻辑。

+0

@Brain:我已经完成了所有工作。我刚开始服务时出错 – DotnetSparrow 2011-06-09 17:45:07

+0

@DotnetSparrow:你确定'OnStart'方法立即返回吗?服务控制管理器要求服务在合理的时间内响应启动请求。我编辑了我的答案。 – 2011-06-09 17:48:36

+0

@Brain:我刚刚看到有System.Threading.Thread.Sleep(10000000);在onstart。我已经删除它,但首先我需要停止服务,我不能停止它的状态开始。是因为这种睡眠吗?请建议 – DotnetSparrow 2011-06-09 17:50:54

0

几个月前,我需要创建一个Windows服务,我发现这个LINKTHIS一个非常有帮助。

+0

我需要关于服务安装的帮助。我的服务已成功创建。这似乎是一个权限问题。请建议。 – DotnetSparrow 2011-06-09 17:41:28

2

编辑:正如您在其中一个注释中提到的,Thread.Sleep导致OnStart等待大约100多秒,导致出现错误消息。

因为您无法使用sc stop EnviroTracker1停止服务,您可以将该服务标记为删除。机器重新启动后,该服务将消失。 sc delete EnviroTracker1


http://support.microsoft.com/kb/839174

错误1053意味着服务在OnStart方法花费超过30秒。那太多时间了。我个人在我的服务OnStart,我简单地启动一个间隔2秒的计时器。我在定时器过去的功能中完成了我通常在OnStart中完成的所有工作。这样,我的初始化可以花费自己的甜蜜时间,OnStart可以在一秒钟内完成。

为了帮助您解决具体问题,我们需要具体的细节。你在某处提到它似乎是一个权限问题。是什么让你感觉到这一点。更重要的是,为什么不把一些日志报表或特殊处理。如果抛出异常,那么堆栈跟踪将有所帮助。日志记录将帮助你,并反过来找到问题点。您也可以attach a debugger to the service。由于它似乎在OnStart中停留了30秒,你应该有足够的时间将视觉工作室debuger附加到服务实例上。

也许你可以发布OnStart方法的代码...你知道,帮助我们帮助你:)

0

Amith George的答案是导致这个问题的根本原因,但如果你正在寻找如何调试windows服务的OnStart我通常添加以下内容,因为你可能不会速度足以手动连接到服务。

 protected override void OnStart(string[] args) 
    { 
     if (args.Contains("DEBUG_SERVICE)) 
      DebugMode(); 


     #if DEBUG 
      DebugMode(); 
     #endif 



     } 

    private static void DebugMode() 
    { 

     Debugger.Break(); 
    } 

布赖恩·吉迪恩也使得大约需要为“旋转了一个新的线程或以其他方式在某种程度上异步启动逻辑”好点。除非您正在响应系统事件或在网络端口上侦听,否则应该考虑使用计时器。 My answer有一个我用作模板的示例。