Windows 服务未启动

Posted

技术标签:

【中文标题】Windows 服务未启动【英文标题】:Windows service doesn't start 【发布时间】:2014-01-16 00:49:42 【问题描述】:

我按照本教程使用 Microsoft Visual Studio 2010 创建和安装 Windows 服务: http://msdn.microsoft.com/en-us/library/zt39148a%28v=vs.100%29.aspx

我正在使用 3.5 .NET 框架。经过几次尝试,我刚刚从头开始创建了一个新服务,但这次没有为OnStart() 方法提供方法体。服务安装成功,但是当我尝试使用服务管理器运行它时,它什么也没做,过了一会儿,Windows 告诉我该服务无法运行。

任何形式的帮助将不胜感激。

【问题讨论】:

如果OnStart方法什么都不做,服务会立即退出。通常,服务会启动一些前台线程来保持运行。 【参考方案1】:

服务启动时系统调用OnStart()方法。该方法应尽快返回,因为系统将等待成功返回以指示服务正在运行。在此方法中,您通常会启动将执行服务任务的代码。这可能包括启动线程、启动计时器、打开 WCF 服务主机、执行异步套接字命令等。

这是一个简单的示例,它启动一个线程,该线程简单地执行一个等待服务停止的循环。

private ManualResetEvent _shutdownEvent;
private Thread _thread;
protected override void OnStart(string[] args)

    // Uncomment this line to debug the service.
    //System.Diagnostics.Debugger.Launch();

    // Create the event used to end the thread loop.
    _shutdownEvent = new ManualResetEvent(false);

    // Create and start the thread.
    _thread = new Thread(ThreadFunc);
    _thread.Start();


protected override void OnStop()

    // Signal the thread to stop.
    _shutdownEvent.Set();

    // Wait for the thread to end.
    _thread.Join();


private void ThreadFunc()

    // Loop until the service is stopped.
    while (!_shutdownEvent.WaitOne(0))
    
        // Put your service's execution logic here.  For now,
        // sleep for one second.
        Thread.Sleep(1000);
    

如果您已经到了安装该服务的地步,那么听起来您一切顺利。对于它的价值,我有从头开始创建服务的分步说明here 以及从命令行安装/卸载服务本身而不依赖于InstallUtil.exe here 的后续说明.

【讨论】:

【参考方案2】:

我终于设法解决了这个问题。显然问题在于 Visual Studio 安装程序,因为我设法编译项目,然后在管理模式下使用 installutil 安装服务。

【讨论】:

以上是关于Windows 服务未启动的主要内容,如果未能解决你的问题,请参考以下文章

Windows 服务未启动 - Excel - 邮件互操作

启动脚本未在启用自动缩放的 GCP Compute Engine Windows 服务器上运行

如何在Windows下启动Oracle数据库服务

windows如何启动Apache?

windows下启动mysql服务的命令行启动和手动启动方法

如何通知Windows该服务已启动?