2012-10-10 110 views
1

在我的項目中,我想監視系統中的sofeware安裝和取消安裝,因此我使用WMI事件機制,但現在遇到問題並且有問題。WMI:監視器註冊表更改

問題:

我想監視HKLM'SOFTWARE \微軟\的Windows \ CurrentVersion \反安裝」,但代碼[1]的工作誤差(ExecNotificationQueryAnsync失敗= 0x80041058)。而代碼[2]工程確定,怎麼了?

[1]

hres = pSvc->ExecNotificationQueryAsync(
    _bstr_t("WQL"), 
    _bstr_t("SELECT * FROM RegistryTreeChangeEvent WITHIN 1 " "WHERE Hive='HKEY_LOCAL_MACHINE'" "AND RootPath='software\\Microsoft\\Windows\\currentversion\\unistall'" 
    ), 
    WBEM_FLAG_SEND_STATUS, 
    NULL, 
    pStubSink); 
[2] 

hres = pSvc->ExecNotificationQueryAsync(
    _bstr_t("WQL"), 
    _bstr_t("SELECT * FROM RegistryTreeChangeEvent WITHIN 1 " "WHERE Hive='HKEY_LOCAL_MACHINE'" "AND RootPath='software'" 
    ), 
    WBEM_FLAG_SEND_STATUS, 
    NULL, 
    pStubSink); 

問題:在我的事件使用者,我希望得到該軟件的名字,我該怎麼辦?

謝謝!!

+2

你的「反安裝」應該是「卸載」 – Anonimista

+0

是的,我失去了一個「n」,但它仍然有效錯誤(ExecNotificationQueryAnsync失敗= 0x80041058),我認爲這是「\」在無法正確識別的完整路徑中。 – user1732045

+1

我找到了問題的答案,它應該更改爲RootPath ='software \\\\ Microsoft \\\\ Windows \\\\ currentversion \\\\\\\'卸載' 然後有人知道如何獲取軟件的名稱?感謝 – user1732045

回答

0

只需使用

SELECT * FROM RegistryTreeChangeEvent WITHIN 1 " "WHERE Hive='HKEY_LOCAL_MACHINE'" "AND RootPath='software\\\\Microsoft\\\\Windows\\\\currentversion\\\\unistall'"