gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:59:59 25 4
gpt4 key购买 nike

我是使用 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();
}

关于c# - 如何从 Windows 服务运行 exe 并在 exe 进程退出时停止服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3719126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com