github.com/cellofellow/gopkg@v0.0.0-20140722061823-eec0544a62ad/osext/winsvc/example/manage.go (about) 1 // Copyright 2012 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package main 6 7 import ( 8 "chai2010.gopkg/osext/winsvc/mgr" 9 "chai2010.gopkg/osext/winsvc/svc" 10 "fmt" 11 "time" 12 ) 13 14 func startService(name string) error { 15 m, err := mgr.Connect() 16 if err != nil { 17 return err 18 } 19 defer m.Disconnect() 20 s, err := m.OpenService(name) 21 if err != nil { 22 return fmt.Errorf("could not access service: %v", err) 23 } 24 defer s.Close() 25 err = s.Start([]string{"p1", "p2", "p3"}) 26 if err != nil { 27 return fmt.Errorf("could not start service: %v", err) 28 } 29 return nil 30 } 31 32 func controlService(name string, c svc.Cmd, to svc.State) error { 33 m, err := mgr.Connect() 34 if err != nil { 35 return err 36 } 37 defer m.Disconnect() 38 s, err := m.OpenService(name) 39 if err != nil { 40 return fmt.Errorf("could not access service: %v", err) 41 } 42 defer s.Close() 43 status, err := s.Control(c) 44 if err != nil { 45 return fmt.Errorf("could not send control=%d: %v", c, err) 46 } 47 timeout := time.Now().Add(10 * time.Second) 48 for status.State != to { 49 if timeout.Before(time.Now()) { 50 return fmt.Errorf("timeout waiting for service to go to state=%d", to) 51 } 52 time.Sleep(300 * time.Millisecond) 53 status, err = s.Query() 54 if err != nil { 55 return fmt.Errorf("could not retrieve service status: %v", err) 56 } 57 } 58 return nil 59 }