3
我正在使用msi windows api以編程方式管理某些安裝的程序。查找已安裝產品的所有組件
我有這種情況,我知道Product
代碼,但我希望找到所有與此產品相關的Components
。
我知道如何枚舉系統中的所有組件,並查詢組件的產品代碼。所以一個明顯的解決方案就是遍歷所有這些組件,並對產品ID進行字符串比較。 (請參閱下面的代碼)。
但是這個表現不好。在我的機器上,此代碼正在搜索37,601個組件以查找匹配的8個組件。
是否有一些API調用給定產品標識符,僅列出該產品的組件?
do
{
// productGuid is a std::wstring
TCHAR componentBuffer[39];
msiReturn = ::MsiEnumComponents(componentIndex++, componentBuffer);
if(msiReturn != ERROR_NO_MORE_ITEMS)
{
TCHAR productBuffer[39];
UINT productReturnCode = ::MsiGetProductCode(componentBuffer, productBuffer);
if(productGuid == productBuffer)
{
// Add this to the matching component ids
}
}
}
while (msiReturn != ERROR_NO_MORE_ITEMS);