我是一个完全熟悉
Windows服务的人.我有一个基本的骨架服务,我目前正在这样做:
protected override void OnStart(string[] args) { base.OnStart(args); Process.Start(@"someProcess.exe"); }
只是为了在程序开始时启动exe.
但是,当进程从exe退出开始时,我想让服务停止.
我很确定我需要做一些线程(我也是初学者),但我不确定这是如何工作的总体轮廓,也不确定从内部停止进程的具体方法.
你能帮我解决这个问题的一般过程(即从OnStart开始一个帖子,那么……?)?谢谢.
解决方法
您可以使用
BackgroundWorker
进行线程处理,使用
Process.WaitForExit()
等待进程终止,直到您停止服务为止.
你应该做一些线程是正确的,在OnStart中做大量的工作可能会导致在启动服务时无法从Windows正确启动的错误.
protected override void OnStart(string[] args) { BackgroundWorker bw = new BackgroundWorker(); bw.DoWork += new DoWorkEventHandler(bw_DoWork); bw.RunWorkerAsync(); } private void bw_DoWork(object sender,DoWorkEventArgs e) { Process p = new Process(); p.StartInfo = new ProcessStartInfo("file.exe"); p.Start(); p.WaitForExit(); base.Stop(); }
编辑
您可能还希望将Process p移动到类成员并在OnStop中停止该过程,以确保如果exe变得混乱,您可以再次停止该服务.
protected override void OnStop() { p.Kill(); }