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.
14 "golang.org/x/sys/windows/svc/eventlog"
15 "golang.org/x/sys/windows/svc/mgr"
18 func exePath() (string, error) {
20 p, err := filepath.Abs(prog)
26 if !fi.Mode().IsDir() {
29 err = fmt.Errorf("%s is directory", p)
31 if filepath.Ext(p) == "" {
35 if !fi.Mode().IsDir() {
38 err = fmt.Errorf("%s is directory", p)
44 func installService(name, desc string) error {
45 exepath, err := exePath()
49 m, err := mgr.Connect()
54 s, err := m.OpenService(name)
57 return fmt.Errorf("service %s already exists", name)
59 s, err = m.CreateService(name, exepath, mgr.Config{DisplayName: desc}, "is", "auto-started")
64 err = eventlog.InstallAsEventCreate(name, eventlog.Error|eventlog.Warning|eventlog.Info)
67 return fmt.Errorf("SetupEventLogSource() failed: %s", err)
72 func removeService(name string) error {
73 m, err := mgr.Connect()
78 s, err := m.OpenService(name)
80 return fmt.Errorf("service %s is not installed", name)
87 err = eventlog.Remove(name)
89 return fmt.Errorf("RemoveEventLogSource() failed: %s", err)