mirror of
https://github.com/genuinetools/reg.git
synced 2024-08-19 21:30:24 -04:00
77 lines
1.7 KiB
Go
77 lines
1.7 KiB
Go
// 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"
|
|
|
|
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
|
|
}
|