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 服务未启动的主要内容,如果未能解决你的问题,请参考以下文章
启动脚本未在启用自动缩放的 GCP Compute Engine Windows 服务器上运行