diff --git a/windows/svc/mgr/service.go b/windows/svc/mgr/service.go index fdc46af5..ded1c7a4 100644 --- a/windows/svc/mgr/service.go +++ b/windows/svc/mgr/service.go @@ -8,6 +8,7 @@ package mgr import ( "syscall" + "unsafe" "golang.org/x/sys/windows" "golang.org/x/sys/windows/svc" @@ -60,13 +61,15 @@ func (s *Service) Control(c svc.Cmd) (svc.Status, error) { // Query returns current status of service s. func (s *Service) Query() (svc.Status, error) { - var t windows.SERVICE_STATUS - err := windows.QueryServiceStatus(s.Handle, &t) + var t windows.SERVICE_STATUS_PROCESS + var needed uint32 + err := windows.QueryServiceStatusEx(s.Handle, windows.SC_STATUS_PROCESS_INFO, (*byte)(unsafe.Pointer(&t)), uint32(unsafe.Sizeof(t)), &needed) if err != nil { return svc.Status{}, err } return svc.Status{ - State: svc.State(t.CurrentState), - Accepts: svc.Accepted(t.ControlsAccepted), + State: svc.State(t.CurrentState), + Accepts: svc.Accepted(t.ControlsAccepted), + ProcessId: t.ProcessId, }, nil } diff --git a/windows/svc/service.go b/windows/svc/service.go index 94879d5e..51b94dff 100644 --- a/windows/svc/service.go +++ b/windows/svc/service.go @@ -72,6 +72,7 @@ type Status struct { Accepts Accepted CheckPoint uint32 // used to report progress during a lengthy operation WaitHint uint32 // estimated time required for a pending operation, in milliseconds + ProcessId uint32 } // ChangeRequest is sent to the service Handler to request service status change.