.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / sys@v0.0.0-20210124154548-22da62e12c0c / windows / svc / example / manage.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/sys@v0.0.0-20210124154548-22da62e12c0c/windows/svc/example/manage.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/sys@v0.0.0-20210124154548-22da62e12c0c/windows/svc/example/manage.go
new file mode 100644 (file)
index 0000000..782dbd9
--- /dev/null
@@ -0,0 +1,62 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build windows
+
+package main
+
+import (
+       "fmt"
+       "time"
+
+       "golang.org/x/sys/windows/svc"
+       "golang.org/x/sys/windows/svc/mgr"
+)
+
+func startService(name string) error {
+       m, err := mgr.Connect()
+       if err != nil {
+               return err
+       }
+       defer m.Disconnect()
+       s, err := m.OpenService(name)
+       if err != nil {
+               return fmt.Errorf("could not access service: %v", err)
+       }
+       defer s.Close()
+       err = s.Start("is", "manual-started")
+       if err != nil {
+               return fmt.Errorf("could not start service: %v", err)
+       }
+       return nil
+}
+
+func controlService(name string, c svc.Cmd, to svc.State) error {
+       m, err := mgr.Connect()
+       if err != nil {
+               return err
+       }
+       defer m.Disconnect()
+       s, err := m.OpenService(name)
+       if err != nil {
+               return fmt.Errorf("could not access service: %v", err)
+       }
+       defer s.Close()
+       status, err := s.Control(c)
+       if err != nil {
+               return fmt.Errorf("could not send control=%d: %v", c, err)
+       }
+       timeout := time.Now().Add(10 * time.Second)
+       for status.State != to {
+               if timeout.Before(time.Now()) {
+                       return fmt.Errorf("timeout waiting for service to go to state=%d", to)
+               }
+               time.Sleep(300 * time.Millisecond)
+               status, err = s.Query()
+               if err != nil {
+                       return fmt.Errorf("could not retrieve service status: %v", err)
+               }
+       }
+       return nil
+}