MCPcopy
hub / github.com/cloudflare/cloudflared / installWindowsService

Function installWindowsService

cmd/cloudflared/windows_service.go:176–226  ·  view source on GitHub ↗
(c *cli.Context)

Source from the content-addressed store, hash-verified

174}
175
176func 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
228func uninstallWindowsService(c *cli.Context) error {
229 log := logger.CreateLoggerFromContext(c, logger.EnableTerminalLog).

Callers

nothing calls this directly

Calls 8

CreateLoggerFromContextFunction · 0.92
serviceAlreadyExistsWarnFunction · 0.85
configRecoveryOptionFunction · 0.85
LoggerMethod · 0.80
CloseMethod · 0.65
StartMethod · 0.65
ErrMethod · 0.45

Tested by

no test coverage detected