golang.org/x/sys@v0.9.0/windows/svc/example/main.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 //go:build windows 6 // +build windows 7 8 // Example service program that beeps. 9 // 10 // The program demonstrates how to create Windows service and 11 // install / remove it on a computer. It also shows how to 12 // stop / start / pause / continue any service, and how to 13 // write to event log. It also shows how to use debug 14 // facilities available in debug package. 15 package main 16 17 import ( 18 "flag" 19 "fmt" 20 "log" 21 "os" 22 "strings" 23 24 "golang.org/x/sys/windows/svc" 25 ) 26 27 func usage(errmsg string) { 28 fmt.Fprintf(os.Stderr, 29 "%s\n\n"+ 30 "usage: %s <command>\n"+ 31 " where <command> is one of\n"+ 32 " install, remove, debug, start, stop, pause or continue.\n", 33 errmsg, os.Args[0]) 34 os.Exit(2) 35 } 36 37 var svcName = "exampleservice" 38 39 func main() { 40 flag.StringVar(&svcName, "name", svcName, "name of the service") 41 flag.Parse() 42 43 inService, err := svc.IsWindowsService() 44 if err != nil { 45 log.Fatalf("failed to determine if we are running in service: %v", err) 46 } 47 if inService { 48 runService(svcName, false) 49 return 50 } 51 52 if len(os.Args) < 2 { 53 usage("no command specified") 54 } 55 56 cmd := strings.ToLower(os.Args[1]) 57 switch cmd { 58 case "debug": 59 runService(svcName, true) 60 return 61 case "install": 62 err = installService(svcName, "example service") 63 case "remove": 64 err = removeService(svcName) 65 case "start": 66 err = startService(svcName) 67 case "stop": 68 err = controlService(svcName, svc.Stop, svc.Stopped) 69 case "pause": 70 err = controlService(svcName, svc.Pause, svc.Paused) 71 case "continue": 72 err = controlService(svcName, svc.Continue, svc.Running) 73 default: 74 usage(fmt.Sprintf("invalid command %s", cmd)) 75 } 76 if err != nil { 77 log.Fatalf("failed to %s %s: %v", cmd, svcName, err) 78 } 79 return 80 }