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); } }
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); } }