我正在创建调用我的批处理文件的简单Windows服务,现在我想停止或终止批处理文件,将其停止到services.msc,我的服务停止但批处理文件在后台仍处于活动状态。我在后台终止批处理文件,我将停止我的服务。
提前谢谢。
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
namespace Myservices
{
public partial class Myservices: ServiceBase
{
private ProcessStartInfo processListener;
Process p;
public Myservices()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
processListener = new ProcessStartInfo{
CreateNoWindow = true,
UseShellExecute = false,
FileName = "cmd.exe",
Arguments = string.Format("/C \"{0}\"", "C:\\myservices\\servceupdate.bat"),
WindowStyle = ProcessWindowStyle.Hidden,
RedirectStandardOutput = true,
RedirectStandardError = true,
ErrorDialog = false
};
p=Process.Start(processListener);
}
protected override void OnStop()
{
p.Close();//Here my batch file did not terminate.
}
}
答案 0 :(得分:2)
将标题放在批处理文件servceupdate.bat
中,如下所示:
title servceupdate.bat
然后,在要用于终止进程的脚本中,可以运行此cmd:
for /f "tokens=2 delims= " %%a in ('tasklist /v ^| findstr "servceupdate.bat"') do taskkill /f /pid %%a
答案 1 :(得分:0)
您希望在父服务停止时使用Process Jobs终止任何子进程。
见