Devo modificare l'utente di accesso per un servizio di Windows a livello di programmazione. E Sto usando il seguente codice per farlo:Modifica utente Servizio di Windows a livello di programmazione
string objPath = string.Format("Win32_Service.Name='{0}'", ServiceName);
using (ManagementObject service = new ManagementObject(new ManagementPath(objPath)))
{
object[] wmiParams = new object[11];
if (PredefinedAccount)
{
wmiParams[6] = "LocalSystem";
wmiParams[7] = "";
}
else
{
wmiParams[6] = ServiceUsername; // provided by user
wmiParams[7] = ServicePassword; // provided by user
}
object invokeResult = service.InvokeMethod("Change", wmiParams);
// handle invokeResult - no error up to this point
}
Questo codice funziona nel 90% dei casi, ma in qualche servizio situazioni non può essere avviato a causa di errore di accesso. Di solito non c'è errore InvokeMetod ma quando si cerca di avviare il servizio si ottiene il seguente errore:
System.InvalidOperationException: Cannot start service X on computer '.'. --> System.ComponentModel.Win32Exception: The service did not start due to a logon failure.
La soluzione soluzione è semplice, abbiamo solo bisogno di inserire le stesse credenziali tramite l'interfaccia di Windows ed il problema è risolto.
Quindi la mia domanda è, qualcuno ha riscontrato il problema simile con ManagementObject perché sembra che in qualche situazione non riguardi Username e password per il servizio di Windows?
Mi chiedo se è a causa della vostra istruzione using. Quello che intendo è che il ManagementObject viene distrutto prima di poterlo completare? Non ho molta familiarità con WMI, quindi non ne sono sicuro. – HVS
Poiché il nome utente e la password sono stati immessi dall'utente, anch'io cercherò di verificare i problemi. Assicurati che siano nomi validi. "DOMINIO \ nomeutente" è valido in qualsiasi sistema, ma "nome utente @ DOMINIO" non funziona in Windows 2000 e versioni precedenti. – HVS
Abbiamo lo stesso problema e sono abbastanza sicuro che il servizio sia stato installato con un programma di installazione C#, .net 1.1. Avvio il servizio dalla riga di comando ('net start') e ottengo l'errore di accesso. Stranamente questo accade con 2 dei 7 servizi installati sulla macchina (probabilmente usando lo stesso codice di installazione). Non ho ancora avuto modo di diagnosticarlo ma la macchina è Windows 2003 Server con i service pack più recenti. I servizi sono C# .net 2.0 codice. Digitando manualmente la password lo corregge fino al riavvio. – LegendLength