Windows服务状态即使在实际启动时也始终保持启动状态

时间:2012-05-25 20:04:33

标签: c# windows-services

我按照标记的答案here中的说明创建了一项服务。该服务已正确安装。当我在一段时间后启动服务时它会抛出一条消息 “Windows无法在本地计算机上启动xxx服务。

错误1053:服务未及时响应启动或控制请求。 “

点击“确定”后,其状态始终为“正在启动”。当我检查应用程序和系统日志时,没有错误。

当我检查SQL跟踪时,该服务实际上正在运行并执行它应该执行的操作。那么为什么它的状态保持在“开始”?

更新: 这是OnStart方法中的代码

 protected override void OnStart(string[] args)
        {

            Loader loader = new Loader();
            loader.StartProcess();
        }

更新2:

基于WiktorZychla的评论,我做了这个并且它有效:)

protected override void OnStart(string[] args)
        {

            Loader loader = new Loader();

            ThreadStart threadDelegate = new ThreadStart(loader.StartProcess);
            Thread newThread = new Thread(threadDelegate);
            newThread.Start();

        }

3 个答案:

答案 0 :(得分:6)

根据WiktorZychla的评论,这就是我所做的

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using IndexLoader;
using System.Threading;

namespace myNameSpace
{
    public partial class LoaderService : ServiceBase
    {
        Thread newThread;
        public LoaderService()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {

            Loader loader = new Loader();

            ThreadStart threadDelegate = new ThreadStart(loader.StartProcess);
            newThread = new Thread(threadDelegate);
            newThread.Start();

        }

        protected override void OnStop()
        {
            if ((newThread != null) && (newThread.IsAlive))
            {


                Thread.Sleep(5000);
                newThread.Abort();

            }
        }
    }
}

答案 1 :(得分:5)

确切地知道OnStart()方法中的内容是有益的。 OnStart()方法是来自用于启动服务的操作系统的回调,但必须在30秒左右返回(我记得在某处读过)。否则,操作系统会给出您正在看到的消息。简而言之,将OnStart()方法限制为初始化,并将服务的实际工作推迟到某种线程。

答案 2 :(得分:1)

Main()函数的Program.cs文件中,确保您拥有:

ServiceBase.Run(new ServiceClassHere());

在创建保存

的Windows窗体应用程序时,我多次感到内疚 我的Application.Run(new Class());函数

中的

Main()