Sto utilizzando il seguente codice in un'applicazione C# WinForms per avviare i servizi di Windows su un PC remotoavviare un servizio remoto da C#
public static List<Service> GetServices()
{
List<Service> Services = new List<Service>();
ServiceController[] sc = ServiceController.GetServices(Server);
foreach (var s in sc)
{
Services.Add(new Service { Name = s.ServiceName, Running = s.Status == ServiceControllerStatus.Running });
}
return Services;
}
public static bool StartService(string ServiceName)
{
try
{
ServiceController sc = new ServiceController(ServiceName, Server);
sc.Start();
sc.WaitForStatus(ServiceControllerStatus.Running, new TimeSpan(0, 0, 10));
sc.Refresh();
return sc.Status == ServiceControllerStatus.Running;
}
catch(Exception ex) { return false; }
}
Il metodo GetServices funziona bene quando si punta al mio PC locale o al PC remoto. Il metodo StartService funziona tuttavia solo sul mio PC locale, quando viene eseguito sul PC remoto, viene negato l'accesso. In questo caso il PC remoto è un computer Windows XP pro sullo stesso dominio e l'utente con cui sto eseguendo l'app ha i diritti di amministratore locale su di esso.
Non sono sicuro se si tratta di un problema con il mio codice o se le mie autorizzazioni non sono corrette.
Se si tratta di un problema di autorizzazioni, fatemelo sapere e proverò a chiedere su ServerFault.
Grazie
Primo test rapido, aprire Gestione servizi e connettersi al PC remoto e provare ad avviare il servizio richiesto. –
Sei sicuro di avere la tua applicazione come amministratore? Disponi di autorizzazioni CAS ('ServiceControllerPermission (ServiceControllerPermissionAccess.Control)' e 'SecurityPermission (PermissionState.Unrestricted)')? Si dovrebbe prima verificare se 'sc.Status == ServiceControllerStatus.Stopped'. –
Ok anche il Service Manager fallisce quindi immagino che questa sia una domanda per ServerFault grazie per l'aiuto. – Gavin