예제 #1
0
        /// <summary>
        /// Class for work with service
        /// </summary>
        /// <param name="serviceName">Selected service</param>
        /// <param name="serviceAccess">Access to service</param>
        public ServiceEngine(string serviceName, ServiceAccess serviceAccess)
        {
            _service = new ServiceController(serviceName, Environment.MachineName);

            _schSCManager = OpenSCManager(null, null, SCM_ACCESS.SC_MANAGER_ALL_ACCESS);
            if (_schSCManager.IsInvalid)
            {
                throw new Exception(string.Format("OpenSCManager failed {0}", Marshal.GetLastWin32Error()));
            }

            SERVICE_ACCESS sA = SERVICE_ACCESS.SERVICE_ALL_ACCESS;

            if (serviceAccess == ServiceAccess.Read)
            {
                sA = SERVICE_ACCESS.SERVICE_QUERY_CONFIG;
            }
            _schService = OpenService(_schSCManager, serviceName, sA);
            if (_schService.IsInvalid)
            {
                throw new Exception(string.Format("OpenService failed {0}", Marshal.GetLastWin32Error()));
            }

            IsServiceMarkedForDelete = false;
            if (!ChangeServiceConfig(_schService, SERVICE_NO_CHANGE, SERVICE_NO_CHANGE, SERVICE_NO_CHANGE, null, null, IntPtr.Zero, null, null, null, null))
            {
                if (Marshal.GetLastWin32Error() == 1072)
                {
                    IsServiceMarkedForDelete = true;
                }
            }
        }
예제 #2
0
        public IService OpenService(string serviceName, SERVICE_ACCESS desiredAccess)
        {
            var serviceHandle = NativeMethods.OpenService(handle, serviceName, (uint)desiredAccess);

            if (serviceHandle == IntPtr.Zero)
            {
                throw new Win32Exception();
            }

            return(new Service(serviceHandle));
        }
예제 #3
0
 public static extern ServiceControlHandle CreateService(ServiceControlHandle serviceControlManagerHandler,
                                                         string lpSvcName,
                                                         string lpDisplayName,
                                                         SERVICE_ACCESS dwDesiredAccess,
                                                         SERVICE_TYPES dwServiceType,
                                                         SERVICE_START_TYPES dwStartType,
                                                         SERVICE_ERROR_CONTROL dwErrorControl,
                                                         string lpPathName,
                                                         string lpLoadOrderGroup,
                                                         IntPtr lpdwTagId,
                                                         string lpDependencies,
                                                         string lpServiceStartName,
                                                         string lpPassword);
예제 #4
0
 private static extern SafeWaitHandle CreateService(
     SafeWaitHandle hSCManager,
     string lpServiceName,
     string lpDisplayName,
     SERVICE_ACCESS dwDesiredAccess,
     Int32 dwServiceType,
     Int32 dwStartType,
     Int32 dwErrorControl,
     string lpBinaryPathName,
     string lpLoadOrderGroup,
     Int32 lpdwTagId,
     string lpDependencies,
     string lpServiceStartName,
     string lpPassword);
예제 #5
0
 internal static extern IntPtr CreateService(
     IntPtr hSCManager,
     string lpServiceName,
     string lpDisplayName,
     SERVICE_ACCESS dwDesiredAccess,
     SERVICE_TYPE dwServiceType,
     SERVICE_START_TYPE dwStartType,
     SERVICE_ERROR dwErrorControl,
     string lpBinaryPathName,
     string lpLoadOrderGroup,
     IntPtr lpdwTagId,
     string lpDependencies,
     string lpServiceStartName,
     string lpPassword);
예제 #6
0
        public IService CreateService(
            string serviceName,
            string displayName,
            SERVICE_ACCESS desiredAccess,
            SERVICE_TYPE serviceType,
            SERVICE_START_TYPE startType,
            SERVICE_ERROR_CONTROL errorControl,
            string binaryPathName,
            string loadOrderGroup,
            IntPtr tagId,
            ICollection <string> dependencies,
            string serviceStartName,
            string password)
        {
            string deps = (dependencies?.Any() ?? false) ? string.Join("\0", dependencies) : null;

            var serviceHandle = NativeMethods.CreateService(
                handle,
                serviceName,
                displayName,
                (uint)desiredAccess,
                (uint)serviceType,
                (uint)startType,
                (uint)errorControl,
                binaryPathName,
                loadOrderGroup,
                tagId,
                deps,
                serviceStartName,
                password
                );

            if (serviceHandle == IntPtr.Zero)
            {
                throw new Win32Exception();
            }

            return(new Service(serviceHandle));
        }
예제 #7
0
 public static extern ServiceControlHandle OpenService(ServiceControlHandle serviceControlManagerHandle, string lpSvcName, SERVICE_ACCESS dwDesiredAccess);
예제 #8
0
 internal static extern SafeServiceHandle OpenService(SafeServiceHandle manager, string serviceName, SERVICE_ACCESS desiredAccess);
예제 #9
0
 internal static extern IntPtr OpenService(IntPtr hSCManager, string lpServiceName, SERVICE_ACCESS dwDesiredAccess);
예제 #10
0
 public static extern IntPtr OpenService(IntPtr databaseHandle, string serviceName, SERVICE_ACCESS access);
예제 #11
0
 public static extern IntPtr CreateService(IntPtr databaseHandle, string serviceName, string displayName, SERVICE_ACCESS access, int serviceType, int startType, int errorControl, string binaryPath, string loadOrderGroup, IntPtr pTagId, string dependencies, string servicesStartName, string password);
예제 #12
0
 static extern IntPtr OpenService(IntPtr hSCManager, string lpServiceName, SERVICE_ACCESS dwDesiredAccess);
 public static extern SafeServiceHandle OpenService(
     SafeServiceHandle hSCManager,
     string lpServiceName,
     SERVICE_ACCESS dwDesiredAccess);
예제 #14
0
 private static extern SafeWaitHandle OpenService(SafeWaitHandle hSCManager, string lpServiceName, SERVICE_ACCESS dwDesiredAccess);
예제 #15
0
 public static extern SafeServiceHandle OpenService(
     SafeServiceHandle hSCManager,
     string lpServiceName,
     SERVICE_ACCESS dwDesiredAccess);
예제 #16
0
 public static extern IntPtr OpenService(SafeHandle hSCManager,
                                         [MarshalAs(UnmanagedType.LPWStr)] string lpServiceName,
                                         [MarshalAs(UnmanagedType.U4)] SERVICE_ACCESS dwDesiredAccess);
예제 #17
0
 public static extern SafeServiceHandle CreateService(SafeServiceHandle hSCManager,
                                                      string lpServiceName, string lpDisplayName, SERVICE_ACCESS dwDesiredAccess,
                                                      SERVICE_TYPE dwServiceType, ServiceStartType dwStartType, SERVICE_ERROR dwErrorControl,
                                                      string lpBinaryPathName, string lpLoadOrderGroup, IntPtr lpdwTagId,
                                                      char[] lpDependencies, string lpServiceStartName, string lpPassword);