(c *cli.Context)
| 174 | } |
| 175 | |
| 176 | func installWindowsService(c *cli.Context) error { |
| 177 | zeroLogger := logger.CreateLoggerFromContext(c, logger.EnableTerminalLog) |
| 178 | |
| 179 | zeroLogger.Info().Msg("Installing cloudflared Windows service") |
| 180 | exepath, err := os.Executable() |
| 181 | if err != nil { |
| 182 | return errors.Wrap(err, "Cannot find path name that start the process") |
| 183 | } |
| 184 | m, err := mgr.Connect() |
| 185 | if err != nil { |
| 186 | return errors.Wrap(err, "Cannot establish a connection to the service control manager") |
| 187 | } |
| 188 | defer m.Disconnect() |
| 189 | s, err := m.OpenService(windowsServiceName) |
| 190 | log := zeroLogger.With().Str(LogFieldWindowsServiceName, windowsServiceName).Logger() |
| 191 | if err == nil { |
| 192 | s.Close() |
| 193 | return errors.New(serviceAlreadyExistsWarn(windowsServiceName)) |
| 194 | } |
| 195 | extraArgs, err := getServiceExtraArgsFromCliArgs(c, &log) |
| 196 | if err != nil { |
| 197 | errMsg := "Unable to determine extra arguments for windows service" |
| 198 | log.Err(err).Msg(errMsg) |
| 199 | return errors.Wrap(err, errMsg) |
| 200 | } |
| 201 | |
| 202 | config := mgr.Config{StartType: mgr.StartAutomatic, DisplayName: windowsServiceDescription} |
| 203 | s, err = m.CreateService(windowsServiceName, exepath, config, extraArgs...) |
| 204 | if err != nil { |
| 205 | return errors.Wrap(err, "Cannot install service") |
| 206 | } |
| 207 | defer s.Close() |
| 208 | log.Info().Msg("cloudflared agent service is installed") |
| 209 | err = eventlog.InstallAsEventCreate(windowsServiceName, eventlog.Error|eventlog.Warning|eventlog.Info) |
| 210 | if err != nil { |
| 211 | s.Delete() |
| 212 | return errors.Wrap(err, "Cannot install event logger") |
| 213 | } |
| 214 | |
| 215 | err = configRecoveryOption(s.Handle) |
| 216 | if err != nil { |
| 217 | log.Err(err).Msg("Cannot set service recovery actions") |
| 218 | log.Info().Msgf("See %s to manually configure service recovery actions", windowsServiceUrl) |
| 219 | } |
| 220 | |
| 221 | err = s.Start() |
| 222 | if err == nil { |
| 223 | log.Info().Msg("Agent service for cloudflared installed successfully") |
| 224 | } |
| 225 | return err |
| 226 | } |
| 227 | |
| 228 | func uninstallWindowsService(c *cli.Context) error { |
| 229 | log := logger.CreateLoggerFromContext(c, logger.EnableTerminalLog). |
nothing calls this directly
no test coverage detected