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);

 

 

 

 

 

 

posted on 2012-06-07 15:21  Melissa_00  阅读(460)  评论(0)    收藏  举报