2013-04-24 178 views
0

我创建了一个服务和安装程序。我在电脑上安装了我的服务。在服务屏幕中,我可以看到该服务正在启动。它不会停止开始,我不能暂停它,没有。我唯一能做的就是卸载。Windows服务不停止“正在启动”

我试过的Visual Studio附加到进程列表的程序,但没有真正发生。我如何调试此服务?我想知道发生了什么事。

+0

此,如果你有太多的通常发生/所有的'OnStart'处理程序中运行代码的 - 你注定要踢东西了在那里,然后*返回*。只有一次你回来,你的服务被视为开始。 – 2013-04-24 13:45:02

+0

我该如何返回? – Joetjah 2013-04-24 13:50:24

回答

1

如果你有太多的/你所有的OnStart处理程序中运行代码的这通常发生 - 你注定要踢东西了在那里,然后返回。只有一次你回来,你的服务被视为开始。

您最好创建一个运行您需要运行的所有的时间,他们Start()然后返回代码的一个或多个新的Thread秒。或者创建隐式运行自己的线程的对象(例如WCF的ServiceHost)。

然后,你的工作在OnStop关闭它们优雅地 - 例如Set a ManualResetEvent然后在这些线程上Join

例如,你的类可能是这样的(未测试)

public class MyService : ServiceBase { 
    private ManualResetEvent _stop = new ManualResetEvent(false); 
    private Thread _worker; 

    public override void OnStart(string[] args) { 
    _worker = new Thread(DoStuff); 
    _worker.Start(); 
    } 

    public override void OnStop() { 
    _stop.Set(); 
    _worker.Join(); 
    } 

    private void DoStuff() { 
    while(!_stop.WaitOne(0)) { 
    //Do something useful here. 
    } 
    } 
}