Tengo este código ejecutando un script de powershell si mi servicio se inicia o se detiene.El estado del ServiceController no refleja correctamente el estado real del servicio
Timer timer1 = new Timer();
ServiceController sc = new ServiceController("MyService");
protected override void OnStart(string[] args)
{
timer1.Elapsed += new ElapsedEventHandler(OnElapsedTime);
timer1.Interval = 10000;
timer1.Enabled = true;
}
private void OnElapsedTime(object source, ElapsedEventArgs e)
{
if ((sc.Status == ServiceControllerStatus.StartPending) || (sc.Status == ServiceControllerStatus.Stopped))
{
StartPs();
}
}
private void StartPs()
{
PSCommand cmd = new PSCommand();
cmd.AddScript(@"C:\windows\security\dard\StSvc.ps1");
PowerShell posh = PowerShell.Create();
posh.Commands = cmd;
posh.Invoke();
}
Está funcionando bien cuando mato a mi servicio de cmd pronta Pero incluso si mi servicio está en funcionamiento, la secuencia de comandos PowerShell continúa ejecutando en sí (que añade un archivo en el ordenador) Cualquier idea de por qué?
¿Sería correcto decir que powershell es ortogonal a esta pregunta, y la pregunta * real * es: ¿por qué mi comprobación 'StartPending' /' Stopped' no funciona correctamente? –
¿Ha intentado poner puntos de interrupción para ver qué está pasando exactamente? –