| // 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 | |
| // Example service program that beeps. | |
| // | |
| // The program demonstrates how to create Windows service and | |
| // install / remove it on a computer. It also shows how to | |
| // stop / start / pause / continue any service, and how to | |
| // write to event log. It also shows how to use debug | |
| // facilities available in debug package. | |
| // | |
| package main | |
| import ( | |
| "fmt" | |
| "log" | |
| "os" | |
| "strings" | |
| "golang.org/x/sys/windows/svc" | |
| ) | |
| func usage(errmsg string) { | |
| fmt.Fprintf(os.Stderr, | |
| "%s\n\n"+ | |
| "usage: %s <command>\n"+ | |
| " where <command> is one of\n"+ | |
| " install, remove, debug, start, stop, pause or continue.\n", | |
| errmsg, os.Args[0]) | |
| os.Exit(2) | |
| } | |
| func main() { | |
| const svcName = "myservice" | |
| inService, err := svc.IsWindowsService() | |
| if err != nil { | |
| log.Fatalf("failed to determine if we are running in service: %v", err) | |
| } | |
| if inService { | |
| runService(svcName, false) | |
| return | |
| } | |
| if len(os.Args) < 2 { | |
| usage("no command specified") | |
| } | |
| cmd := strings.ToLower(os.Args[1]) | |
| switch cmd { | |
| case "debug": | |
| runService(svcName, true) | |
| return | |
| case "install": | |
| err = installService(svcName, "my service") | |
| case "remove": | |
| err = removeService(svcName) | |
| case "start": | |
| err = startService(svcName) | |
| case "stop": | |
| err = controlService(svcName, svc.Stop, svc.Stopped) | |
| case "pause": | |
| err = controlService(svcName, svc.Pause, svc.Paused) | |
| case "continue": | |
| err = controlService(svcName, svc.Continue, svc.Running) | |
| default: | |
| usage(fmt.Sprintf("invalid command %s", cmd)) | |
| } | |
| if err != nil { | |
| log.Fatalf("failed to %s %s: %v", cmd, svcName, err) | |
| } | |
| return | |
| } |