mirror of
https://github.com/prometheus-community/windows_exporter.git
synced 2026-02-26 14:46:35 +00:00
This commit is contained in:
@@ -248,7 +248,7 @@ func getScheduledTasks() (ScheduledTasks, error) {
|
|||||||
runtime.LockOSThread()
|
runtime.LockOSThread()
|
||||||
defer runtime.UnlockOSThread()
|
defer runtime.UnlockOSThread()
|
||||||
|
|
||||||
if err := ole.CoInitializeEx(0, ole.COINIT_MULTITHREADED); err != nil {
|
if err := ole.CoInitializeEx(0, ole.COINIT_APARTMENTTHREADED|ole.COINIT_DISABLE_OLE1DDE); err != nil {
|
||||||
var oleCode *ole.OleError
|
var oleCode *ole.OleError
|
||||||
if errors.As(err, &oleCode) && oleCode.Code() != ole.S_OK && oleCode.Code() != S_FALSE {
|
if errors.As(err, &oleCode) && oleCode.Code() != ole.S_OK && oleCode.Code() != S_FALSE {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
@@ -166,7 +166,7 @@ func (c *Collector) scheduleUpdateStatus(ctx context.Context, logger *slog.Logge
|
|||||||
runtime.LockOSThread()
|
runtime.LockOSThread()
|
||||||
defer runtime.UnlockOSThread()
|
defer runtime.UnlockOSThread()
|
||||||
|
|
||||||
if err := ole.CoInitializeEx(0, ole.COINIT_MULTITHREADED); err != nil {
|
if err := ole.CoInitializeEx(0, ole.COINIT_APARTMENTTHREADED|ole.COINIT_DISABLE_OLE1DDE); err != nil {
|
||||||
var oleCode *ole.OleError
|
var oleCode *ole.OleError
|
||||||
if errors.As(err, &oleCode) && oleCode.Code() != ole.S_OK && oleCode.Code() != 0x00000001 {
|
if errors.As(err, &oleCode) && oleCode.Code() != ole.S_OK && oleCode.Code() != 0x00000001 {
|
||||||
initErrCh <- fmt.Errorf("CoInitializeEx: %w", err)
|
initErrCh <- fmt.Errorf("CoInitializeEx: %w", err)
|
||||||
@@ -178,17 +178,17 @@ func (c *Collector) scheduleUpdateStatus(ctx context.Context, logger *slog.Logge
|
|||||||
defer ole.CoUninitialize()
|
defer ole.CoUninitialize()
|
||||||
|
|
||||||
// Create a new instance of the WMI object
|
// Create a new instance of the WMI object
|
||||||
mus, err := oleutil.CreateObject("Microsoft.Update.Session")
|
sessionObj, err := oleutil.CreateObject("Microsoft.Update.Session")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
initErrCh <- fmt.Errorf("create Microsoft.Update.Session: %w", err)
|
initErrCh <- fmt.Errorf("create Microsoft.Update.Session: %w", err)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
defer mus.Release()
|
defer sessionObj.Release()
|
||||||
|
|
||||||
// Query the IDispatch interface of the object
|
// Query the IDispatch interface of the object
|
||||||
musQueryInterface, err := mus.QueryInterface(ole.IID_IDispatch)
|
musQueryInterface, err := sessionObj.QueryInterface(ole.IID_IDispatch)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
initErrCh <- fmt.Errorf("IID_IDispatch: %w", err)
|
initErrCh <- fmt.Errorf("IID_IDispatch: %w", err)
|
||||||
|
|
||||||
@@ -206,9 +206,9 @@ func (c *Collector) scheduleUpdateStatus(ctx context.Context, logger *slog.Logge
|
|||||||
|
|
||||||
// https://learn.microsoft.com/en-us/windows/win32/api/wuapi/nf-wuapi-iupdatesession-createupdatesearcher
|
// https://learn.microsoft.com/en-us/windows/win32/api/wuapi/nf-wuapi-iupdatesession-createupdatesearcher
|
||||||
us, err := oleutil.CallMethod(musQueryInterface, "CreateUpdateSearcher")
|
us, err := oleutil.CallMethod(musQueryInterface, "CreateUpdateSearcher")
|
||||||
defer func(hc *ole.VARIANT) {
|
defer func(us *ole.VARIANT) {
|
||||||
if us != nil {
|
if us != nil {
|
||||||
_ = hc.Clear()
|
_ = us.Clear()
|
||||||
}
|
}
|
||||||
}(us)
|
}(us)
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ func (s *ScheduleService) Connect() error {
|
|||||||
runtime.LockOSThread()
|
runtime.LockOSThread()
|
||||||
defer runtime.UnlockOSThread()
|
defer runtime.UnlockOSThread()
|
||||||
|
|
||||||
if err := ole.CoInitializeEx(0, ole.COINIT_MULTITHREADED|ole.COINIT_DISABLE_OLE1DDE); err != nil {
|
if err := ole.CoInitializeEx(0, ole.COINIT_APARTMENTTHREADED|ole.COINIT_DISABLE_OLE1DDE); err != nil {
|
||||||
var oleCode *ole.OleError
|
var oleCode *ole.OleError
|
||||||
if errors.As(err, &oleCode) && oleCode.Code() != ole.S_OK && oleCode.Code() != 0x00000001 {
|
if errors.As(err, &oleCode) && oleCode.Code() != ole.S_OK && oleCode.Code() != 0x00000001 {
|
||||||
return err
|
return err
|
||||||
|
|||||||
Reference in New Issue
Block a user