Как создать службу Windows, которая запускает и останавливает несколько 'exe's /' bat's - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь создать службу Windows, которая будет управлять запуском нескольких exe s / bat файлов.

До сих пор я следовал этому руководству и смог запуститьexe со следующим кодом.Но когда я останавливаю службу, порожденный exe-файл кажется отсоединенным, и я не уверен, как его убить программно.

В конце концов, я бы хотел запустить и остановить множество различных bat s и exeс.

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();
    }
  }
}

1 Ответ

0 голосов
/ 23 апреля 2019

Вы можете сделать что-то вроде этого

    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();
            }
        }
      }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...