Example #1
0
        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));
        }