// 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 \n"+ " where 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" isIntSess, err := svc.IsAnInteractiveSession() if err != nil { log.Fatalf("failed to determine if we are running in an interactive session: %v", err) } if !isIntSess { 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 }