123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- // 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
- // Package debug provides facilities to execute svc.Handler on console.
- //
- package debug
- import (
- "os"
- "os/signal"
- "syscall"
- "golang.org/x/sys/windows/svc"
- )
- // Run executes service name by calling appropriate handler function.
- // The process is running on console, unlike real service. Use Ctrl+C to
- // send "Stop" command to your service.
- func Run(name string, handler svc.Handler) error {
- cmds := make(chan svc.ChangeRequest)
- changes := make(chan svc.Status)
- sig := make(chan os.Signal)
- signal.Notify(sig)
- go func() {
- status := svc.Status{State: svc.Stopped}
- for {
- select {
- case <-sig:
- cmds <- svc.ChangeRequest{Cmd: svc.Stop, CurrentStatus: status}
- case status = <-changes:
- }
- }
- }()
- _, errno := handler.Execute([]string{name}, cmds, changes)
- if errno != 0 {
- return syscall.Errno(errno)
- }
- return nil
- }
|