MSDN заявляет, что класс Win32_product не оптимизирован для запросов. Процесс также инициирует проверку согласованности установленных пакетов, проверку и восстановление установки. Я попытался выполнить запрос к классу с помощью запроса Select и подделал образец msi-пакета, удалив некоторые установленные файлы, но восстановление не было запущено. Журнал событий показал перенастройку msi, но действий по восстановлению не было. Действительно ли запрос к классу запускает восстановление в случае повреждения установленной программы, и если это так, то есть ли у нас какие-либо примеры, подтверждающие это?
Вызывает ли запрос класса Win32_Product восстановление msi
Ответы (2)
Запросы WMI слишком медленные. Запрос Installer.ProductInfo может дать вам результаты за 0,1 секунды, что в 200 раз быстрее, чем WMI на моей машине.
Dim msi : Set msi = CreateObject("WindowsInstaller.Installer")
On Error Resume Next
Dim version : version = msi.ProductInfo("{ProductCode}", "VersionString")
Dim installed : installed = ( Err.Number = 0 )
У вас есть ссылка на источник? Я знаю, что win32_product медленный, потому что он не оптимизирован для запросов, а небольшие запросы занимают у меня около 1 минуты. Если бы он восстанавливал каждый msi, установленный в моей системе (371 согласно «быстрой» проверке с помощью Powershell), я уверен, что это заняло бы гораздо больше времени.
В этом классе есть методы, которые могут инициировать восстановление. Я использую его после установки определенного приложения, чьи ярлыки всегда таинственным образом отсутствуют при установке. Вызов Reinstall(9) позаботится об этом за меня. Это задокументировано здесь: Класс Win32_Product ( окна)