Beispiel #1
0
        public void Stop(Service service)
        {
            var servicePtr = ADVANCED_API.OpenService(_managerPtr, service.Name, SERVICE_ACCESS.SERVICE_STOP);

            if (servicePtr == IntPtr.Zero)
            {
                var error = Marshal.GetLastWin32Error();
                throw new Win32Exception(error);
            }
            //var size = Marshal.SizeOf<SERVICE_STATUS>();
            //var statusPtr = Marshal.AllocHGlobal(size);
            //var stopped = Advapi32.ControlService(servicePtr, SERVICE_CONTROL.SERVICE_CONTROL_STOP, statusPtr);
            //var status = Marshal.PtrToStructure<SERVICE_STATUS>(statusPtr);
            //Marshal.FreeHGlobal(statusPtr);
            var stopped = ADVANCED_API.ControlService(servicePtr, SERVICE_CONTROL.SERVICE_CONTROL_STOP, out _);
            var closed  = ADVANCED_API.CloseServiceHandle(servicePtr);

            if (!stopped || !closed)
            {
                var error = Marshal.GetLastWin32Error();
                throw new Win32Exception(error);
            }
        }