加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何从exe服务运行exe并在exe进程退出时停止服务?

发布时间:2020-12-15 18:17:40 所属栏目:百科 来源:网络整理
导读:我是一个完全熟悉 Windows服务的人.我有一个基本的骨架服务,我目前正在这样做: protected override void OnStart(string[] args) { base.OnStart(args); Process.Start(@"someProcess.exe"); } 只是为了在程序开始时启动exe. 但是,当进程从exe退出开始时,我
我是一个完全熟悉 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();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读