diff --git a/service_windows.go b/service_windows.go index 2b854d7..853f610 100644 --- a/service_windows.go +++ b/service_windows.go @@ -240,6 +240,16 @@ func lowPrivSvc(m *mgr.Mgr, name string) (*mgr.Service, error) { return &mgr.Service{Handle: h, Name: name}, nil } +func lowPrivSvcForQuery(m *mgr.Mgr, name string) (*mgr.Service, error) { + h, err := windows.OpenService( + m.Handle, syscall.StringToUTF16Ptr(name), + windows.SERVICE_QUERY_CONFIG|windows.SERVICE_QUERY_STATUS) + if err != nil { + return nil, err + } + return &mgr.Service{Handle: h, Name: name}, nil +} + func (ws *windowsService) setEnvironmentVariablesInRegistry() error { if len(ws.EnvVars) == 0 { return nil @@ -410,7 +420,7 @@ func (ws *windowsService) Status() (Status, error) { } defer m.Disconnect() - s, err := lowPrivSvc(m, ws.Name) + s, err := lowPrivSvcForQuery(m, ws.Name) if err != nil { if errno, ok := err.(syscall.Errno); ok && errno == errnoServiceDoesNotExist { return StatusUnknown, ErrNotInstalled