public static bool ChangeServiceStartMode( string serviceName, ExpandedServiceStartMode mode) { Trace.WriteLine( "Changing Start Mode of service: \'" + serviceName + "\'" ); IntPtr scManagerHandle = AdvApi32.OpenSCManager( null, null, AdvApi32.SC_MANAGER_ALL_ACCESS ); if (scManagerHandle == IntPtr.Zero) { Trace.WriteLine("Open Service Manager Error"); return(false); } IntPtr serviceHandle = AdvApi32.OpenService( scManagerHandle, serviceName, AdvApi32.SERVICE_QUERY_CONFIG | AdvApi32.SERVICE_CHANGE_CONFIG ); if (serviceHandle == IntPtr.Zero) { Trace.WriteLine("Open Service Error"); return(false); } if (!AdvApi32.ChangeServiceConfig( serviceHandle, AdvApi32.SERVICE_NO_CHANGE, (uint)mode, AdvApi32.SERVICE_NO_CHANGE, null, null, IntPtr.Zero, null, null, null, null)) { Win32Error.Set("ChangeServiceConfig"); Trace.WriteLine(Win32Error.GetFullErrMsg()); return(false); } AdvApi32.CloseServiceHandle(serviceHandle); AdvApi32.CloseServiceHandle(scManagerHandle); Trace.WriteLine( "Start Mode successfully changed to: \'" + mode.ToString() + "\'" ); return(true); }