| 226 | } |
| 227 | |
| 228 | func uninstallWindowsService(c *cli.Context) error { |
| 229 | log := logger.CreateLoggerFromContext(c, logger.EnableTerminalLog). |
| 230 | With(). |
| 231 | Str(LogFieldWindowsServiceName, windowsServiceName).Logger() |
| 232 | |
| 233 | log.Info().Msg("Uninstalling cloudflared agent service") |
| 234 | m, err := mgr.Connect() |
| 235 | if err != nil { |
| 236 | return errors.Wrap(err, "Cannot establish a connection to the service control manager") |
| 237 | } |
| 238 | defer m.Disconnect() |
| 239 | s, err := m.OpenService(windowsServiceName) |
| 240 | if err != nil { |
| 241 | return fmt.Errorf("agent service %s is not installed, so it could not be uninstalled", windowsServiceName) |
| 242 | } |
| 243 | defer s.Close() |
| 244 | |
| 245 | if status, err := s.Query(); err == nil && status.State == svc.Running { |
| 246 | log.Info().Msg("Stopping cloudflared agent service") |
| 247 | if _, err := s.Control(svc.Stop); err != nil { |
| 248 | log.Info().Err(err).Msg("Failed to stop cloudflared agent service, you may need to stop it manually to complete uninstall.") |
| 249 | } |
| 250 | } |
| 251 | |
| 252 | err = s.Delete() |
| 253 | if err != nil { |
| 254 | return errors.Wrap(err, "Cannot delete agent service") |
| 255 | } |
| 256 | log.Info().Msg("Agent service for cloudflared was uninstalled successfully") |
| 257 | err = eventlog.Remove(windowsServiceName) |
| 258 | if err != nil { |
| 259 | return errors.Wrap(err, "Cannot remove event logger") |
| 260 | } |
| 261 | return nil |
| 262 | } |
| 263 | |
| 264 | // defined in https://msdn.microsoft.com/en-us/library/windows/desktop/ms685126(v=vs.85).aspx |
| 265 | type scAction int |