public Service Create(string name, string displayName, bool automatic, string binaryPath) { var startType = automatic ? SERVICE_START_TYPE.SERVICE_AUTO_START : SERVICE_START_TYPE.SERVICE_DEMAND_START; var servicePtr = ADVANCED_API.CreateService( _managerPtr, name, displayName, SERVICE_ACCESS.SERVICE_ALL_ACCESS, SERVICE_TYPE.SERVICE_WIN32_OWN_PROCESS, startType, SERVICE_ERROR.SERVICE_ERROR_NORMAL, binaryPath, null, IntPtr.Zero, null, null, null); if (servicePtr == IntPtr.Zero) { var error = Marshal.GetLastWin32Error(); throw new Win32Exception(error); } var quried = ADVANCED_API.QueryServiceStatus(servicePtr, out var status); var closed = ADVANCED_API.CloseServiceHandle(servicePtr); if (!quried || !closed) { var error = Marshal.GetLastWin32Error(); throw new Win32Exception(error); } return(new Service(name, displayName, status)); }