如何创建一个启动和停止多个'exe'/'bat的Windows服务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何创建一个启动和停止多个'exe'/'bat的Windows服务相关的知识,希望对你有一定的参考价值。

我正在尝试创建一个Windows服务,将管理启动多个exes / bat文件。

到目前为止,我已经遵循这个guide,并能够使用以下代码启动exe。但是,当我停止服务时,衍生的exe似乎是分离的,我不确定如何以编程方式杀死它。

最终我想开始和停止许多不同的bats和exes。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.Runtime.InteropServices;

namespace SomeService
{
  public partial class Service1 : ServiceBase
  {

    public Service1()
    {
      InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
      Process.Start("C:\\Users\\JohnnySmalls\\SomeProgram\\bin\\theExe.exe");
    }

    protected override void OnStop()
    {
      // Need to close process, I don't have a reference to it though
      // Process.Close();
    }
  }
}
答案

你可以做这样的事情

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.Linq;
    using System.ServiceProcess;
    using System.Text;
    using System.Threading.Tasks;
    using System.Timers;
    using System.Runtime.InteropServices;

    namespace SomeService
    {

      public partial class Service1 : ServiceBase
      {
        private List<Process> _processes;
        public Service1()
        {
            InitializeComponent();
            _processes = new List<Process>();
        }

        protected override void OnStart(string[] args)
        {
          var process = Process.Start("C:\\Users\\JohnnySmalls\\SomeProgram\\bin\\theExe.exe");
          _processes.Add(process);
        }

        protected override void OnStop()
        {
          // Need to close process, I don't have a reference to it though
          // Process.Close();
            foreach(var process in _processes) {
                process.Close();
            }
        }
      }
    }

以上是关于如何创建一个启动和停止多个'exe'/'bat的Windows服务的主要内容,如果未能解决你的问题,请参考以下文章

如何彻底停止job

Pascal中如何调用exe文件

如何将python文件打包成exe文件

ImportError: 当使用pyinstaller创建一个.exe时,无法导入名称'pywrap_tensorflow'。

零基础逆向工程39_Win32_13_进程创建_句柄表_挂起方式创建进程

Oracle中创建了一个job,每分钟执行一次,那么怎么样使job停下来,但不删除它?