Вы можете использовать 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();
}