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".
0 comments:
Post a Comment