Пример #1
0
 private void UninstallService(ParameterHandlerInfo parameterHandlerInfo)
 {
     try
     {
         var serviceManager = new Win32ServiceManager();
         serviceManager.DeleteService(ServiceName);
         Core.Log.Warning($"The Service \"{ServiceName}\" was uninstalled successfully.");
     }
     catch (Exception ex)
     {
         Core.Log.Error(ex.Message);
     }
 }
Пример #2
0
        private void InstallService(ParameterHandlerInfo parameterHandlerInfo)
        {
            try
            {
                // Environment.GetCommandLineArgs() includes the current DLL from a "dotnet my.dll --register-service" call, which is not passed to Main()
                var remainingArgs = Environment.GetCommandLineArgs()
                                    .Where(arg => arg != "/service-install")
                                    .Select(EscapeCommandLineArgument)
                                    .Append("/service-run");

                var host = Process.GetCurrentProcess().MainModule.FileName;
                if (!host.EndsWith("dotnet.exe", StringComparison.OrdinalIgnoreCase))
                {
                    // For self-contained apps, skip the dll path
                    remainingArgs = remainingArgs.Skip(1);
                }
                var fullServiceCommand = host + " " + string.Join(" ", remainingArgs);


                _settings.DisplayName = _settings.DisplayName ?? Core.ApplicationDisplayName;
                _settings.Description = _settings.Description ?? Core.ApplicationDisplayName;

                Win32ServiceCredentials credentials;
                switch (_settings.Credentials)
                {
                case ServiceCredentials.LocalSystem:
                    credentials = Win32ServiceCredentials.LocalSystem;
                    break;

                case ServiceCredentials.LocalService:
                    credentials = Win32ServiceCredentials.LocalService;
                    break;

                case ServiceCredentials.NetworkService:
                    credentials = Win32ServiceCredentials.NetworkService;
                    break;

                case ServiceCredentials.Custom:
                    credentials = new Win32ServiceCredentials(_settings.Username, _settings.Password);
                    break;

                default:
                    throw new ArgumentException("The Credentials enum has a wrong value.");
                }


                var serviceManager = new Win32ServiceManager();
                serviceManager.CreateOrUpdateService(
                    ServiceName,
                    _settings.DisplayName,
                    _settings.Description,
                    fullServiceCommand,
                    credentials,
                    _settings.AutoStart
                    );

                Core.Log.Warning($"The Service \"{ServiceName}\" was installed successfully.");
            }
            catch (Exception ex)
            {
                Core.Log.Error(ex.Message);
            }
        }