1. using System.ServiceProcess;
using Microsoft.Win32;
2. service start types:
public enum ServiceStartType
{
Automatic_DelayedStart = 1,
Automatic = 2,
Manual = 3,
Disabled = 4,
}
3. start specified service :
public static void StartService(string serviceName, string machineName, uint timeoutMilliseconds)
{
try
{
ServiceController service = newServiceController(serviceName, machineName);
if (service.Status == ServiceControllerStatus.Stopped)
{
service.Start();
}
if (service.Status == ServiceControllerStatus.StartPending)
{
service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromMilliseconds(timeoutMilliseconds));
}
}
catch (Exception ex)
{
throw ex;
}
}
4. Stop specified service
publicstaticvoid StopService(string serviceName, string machineName, uint timeoutMilliseconds)
{ try
{
ServiceController service = newServiceController(serviceName, machineName);
if (service.Status == ServiceControllerStatus.Running)
{
service.Stop();
}
if (service.Status == ServiceControllerStatus.StopPending)
{
service.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromMilliseconds(timeoutMilliseconds));
}
}
catch (Exception ex)
{
throw ex;
}
}
5. Set start type on local machine
publicstaticvoid SetServiceStartType(string serviceName, ServiceStartType type)
{
try{
string regPath = string.Format(@"System\CurrentControlSet\Services\{0}", serviceName);
if (type != ServiceStartType.Automatic_DelayedStart)
{using (RegistryKey serviceKey = Registry.LocalMachine.OpenSubKey(regPath, true))
{
int typeInt = (int)type;
serviceKey.SetValue( "Start", typeInt, RegistryValueKind.DWord);
}
}
else{
using (RegistryKey serviceKey = Registry.LocalMachine.OpenSubKey(regPath, true))
{
serviceKey.SetValue("Start", 2, RegistryValueKind.DWord);
if (Environment.OSVersion.Version.Major >= 6) // win8
serviceKey.SetValue( "DelayedAutostart", 1, RegistryValueKind.DWord);
}
}
}
catch (Exceptionex)
{
throw ex;
}
}
6. Set start type remotely
public static void SetServiceStartTypeRemotely(string serviceName, string machineName, ServiceStartType type)
{
string regPath = string.Format(@"System\CurrentControlSet\Services\{0}", serviceName);
try
{
if (type != ServiceStartType.Automatic_DelayedStart)
{
using (RegistryKey serviceKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine,machineName).OpenSubKey(regPath, true
))
{
int typeInt = (int)type;
serviceKey.SetValue("Start", typeInt, RegistryValueKind.DWord);
}
}
else
{
using (RegistryKey serviceKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, machineName).OpenSubKey(regPath, true
))
{
serviceKey.SetValue("Start", 2, RegistryValueKind.DWord);
if (Environment.OSVersion.Version.Major >= 6) // windows 8
serviceKey.SetValue("DelayedAutostart", 1, RegistryValueKind.DWord);
}
}
}
catch (Exception ex)
{
throw ex;
}
}
7. example
SetServiceStartTypeRemotely("WinRM", "MyMachine", ServiceStartType.Disabled);
StopService("WinRM", "MyMachine", 2000);
浙公网安备 33010602011771号