Prin intermediul la clasei ServiceController putem sa controlam un serviciu windows. Il putem in orice moment porni sau oprii. Dar daca avem nevoie sa ii schimbam startup type? De exemplu daca vreau sa ii schimb startup type-ul de pe manual pe automat?
Din pacate ServiceController nu ne oferă aceasta funcționalitate. Din cod C# nu am gasit o posibilitatea prin care as putea sa fac acest lucru. In schimb am gasit in registry bine ascunse aceste valori.
Daca deschidem registrii si ne uitam sub Local System in path-ul "SYSTEM\CurrentControlSet\Services\" o sa gasim lista cu toate serviciile pe care le avem instalate pe masina. Pentru fiecare serviciu avem:
Din pacate ServiceController nu ne oferă aceasta funcționalitate. Din cod C# nu am gasit o posibilitatea prin care as putea sa fac acest lucru. In schimb am gasit in registry bine ascunse aceste valori.
Daca deschidem registrii si ne uitam sub Local System in path-ul "SYSTEM\CurrentControlSet\Services\" o sa gasim lista cu toate serviciile pe care le avem instalate pe masina. Pentru fiecare serviciu avem:
- nume
- descriere
- tipul
- startup type-ul
- path-ul spre serviciu
- etc
public enum StartupModeType
{
Boot = 0,
System = 1,
Automatic = 2,
Manual = 3,
Disabled = 4
}
Mai sus este lista cu starile pe care le poate avea serviciu. Iar mai jos avem cele doua metode care fac get si set la aceasta valoarea:public StartupModeType GetStartupMode(string serviceName)
{
RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(""SYSTEM\\CurrentControlSet\\Services\\" + serviceName);
StartupModeType startupMode = (StartupModeType)registryKey.GetValue("Start");
registryKey.Close();
return startupMode;
}
public void SetStartupMode(string serviceName, StartupServiceMode startupServiceMode)
{
RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\Services\\Start",RegistryKeyPermissionCheck.ReadWriteSubTree);
registryKey.SetValue(StartupTyeRegistryKey,(int)startupServiceMode);
registryKey.Close();
}
In functie de necesitati putem sa facem niste extension methods la ServiceController care sa se ocupe de acest lucru. O alta varianta era cream un proces nou si sa apelam "sc [numeServiciu] config".
Comments
Post a Comment