Potrzebuję programowo zmienić użytkownika logowania dla usługi systemu Windows. I używam następujący kod, aby to zrobić:Programistycznie zmieniaj użytkownika usługi systemu Windows
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
}
Ten kod działa w 90% sytuacji, ale w niektórych sytuacjach usługi nie można uruchomić z powodu Niepowodzenie logowania. Zwykle nie ma błędu InvokeMetod ale gdy staramy się uruchomić usługę otrzymujemy następujący błąd:
System.InvalidOperationException: Cannot start service X on computer '.'. --> System.ComponentModel.Win32Exception: The service did not start due to a logon failure.
Rozwiązanie Rozwiązaniem jest prosta, po prostu trzeba wprowadzać tych samych danych za pośrednictwem interfejsu systemu Windows i problem został rozwiązany.
Moje pytanie brzmi, czy ktokolwiek doświadczył podobnego problemu z ManagementObject, ponieważ wydaje się, że w niektórych sytuacjach nie dotyczy on nazwy użytkownika i hasła do usługi Windows?
Zastanawiam się, czy to z powodu swojej użyciu instrukcji. Mam na myśli to, że ManagementObject zostaje zniszczony, zanim zostanie ukończony? Nie jestem zbyt zaznajomiony z WMI, więc nie jestem pewien. – HVS
Ponieważ nazwa użytkownika i hasło są wprowadzane przez użytkownika, szukałbym tam również problemów. Upewnij się, że są to prawidłowe nazwy. "DOMAIN \ nazwa_użytkownika" jest dobre w każdym systemie, ale "nazwa użytkownika @ DOMAIN" nie działa w systemie Windows 2000 i wcześniejszych wersjach. – HVS
Mamy ten sam problem i jestem pewien, że usługa została zainstalowana za pomocą programu instalacyjnego C#, .net 1.1. Uruchomię usługę z wiersza poleceń ("net start") i otrzymuję komunikat o błędzie. Co dziwne, dzieje się tak w przypadku 2 z 7 usług zainstalowanych na komputerze (prawdopodobnie przy użyciu tego samego kodu instalacyjnego). Nie udało mi się go jeszcze zdiagnozować, ale maszyna to serwer Windows 2003 z najnowszymi dodatkami Service Pack. Usługi to kod C# .net 2.0. Wpisanie hasła ręcznie powoduje jego naprawę do czasu ponownego uruchomienia. – LegendLength