WUApiLib IUpdateInstaller2 выдает ошибку; Некоторые обновления ОС устанавливают, другие выдают HResult -2145124318
Обновления загружаются с локального сервера, а не из WUS или репозиториев Microsoft. Локальный сервер на основе Linux, хост которогосодержание каждого обновления.
я не используюUpdateDownloader
чтобы загрузить с серверов Microsoft, я вручную загружаю содержимое обновления и затем использую.CopyToCache
Эти установлены нормально
Обновление безопасности для Microsoft .NET Framework 3.5 с пакетом обновления 1 (SP1) в Windows XP, Server 2003, Vista, Server 2008 x86 (KB2736416)
Обновление безопасности для Microsoft Visual Studio 2010 (KB2542054)
Это не
Обновление безопасности для Microsoft .NET Framework 4 на XP, Server 2003, Vista, Windows 7, Server 2008 x86 (KB2840628)
Обновление для Microsoft .NET Framework 3.5 с пакетом обновления 1 (SP1) в Windows XP, Server 2003, Vista и Server 2008 x86 (KB2836940)
Как работает мой процесс
Я получаю это для установки с локального сервера, который я использую, чтобы загрузить весь загружаемый контент для обновления. (Текст цитаты выше KB2840628 приведен ниже)
{
"app_uris": [
{
"file_name": "msipatchregfix-x86_94a84b80b8b45a1ac53a0e5d085513da0f099655.exe",
"file_uri": "https://192.168.5.108/packages/d13c13c81f94fbb48f39c817a71ff239a31773d3a0e821a968dc42a913892841/msipatchregfix-x86_94a84b80b8b45a1ac53a0e5d085513da0f099655.exe",
"file_size": 130600
},
{
"file_name": "ndp40-kb2840628-v2-x86_891d50ff3c1322db3fb0fde222ebb0aaa5260272.exe",
"file_uri": "https://192.168.5.108/packages/d13c13c81f94fbb48f39c817a71ff239a31773d3a0e821a968dc42a913892841/ndp40-kb2840628-v2-x86_891d50ff3c1322db3fb0fde222ebb0aaa5260272.exe",
"file_size": 13294216
}
],
"app_id": "d13c13c81f94fbb48f39c817a71ff239a31773d3a0e821a968dc42a913892841",
"app_name": "Security Update for Microsoft .NET Framework 4 on XP, Server 2003, Vista, Windows 7, Server 2008 x86 (KB2840628)"
}
При этом проблема заключается в том, что некоторые обновления устанавливаются совершенно нормально, но некоторые обновления (я считаю, что те, которые имеют более одногоbundle-updates
) неэто проходит, это сводит меня с ума!
Я сначала скачиваю каждыйUri
а затем загрузить их в обновление с.CopyToCache
var collection = new UpdateCollection();
IList updateFiles = Directory.GetFiles(updateFolder);
var fileCollection = new StringCollection();
try
{
foreach (var file in updateFiles)
fileCollection.Add(file);
//Error happens here on certain updates. Not all.
((IUpdate2)update.BundledUpdates[0]).CopyToCache(fileCollection);
collection.Add(update);
return collection;
}
catch (Exception e)
{
return null;
}
После этого возвращенная коллекция проходит через мойWindowsUpdateInstaller
Метод показан ниже:
IUpdateSession Session = new UpdateSession();
var updatesToInstall = //THIS GETS THE RETURN FROM THE ABOVE CODE...
var installer = (IUpdateInstaller2)Session.CreateUpdateInstaller();
installer.ForceQuiet = true;
installer.AllowSourcePrompts = false;
installer.Updates = updatesToInstall;
foreach (IUpdate updateNode in installer.Updates)
{
updateNode.AcceptEula();
}
//FAILS HERE WITH "-2145124318, Result code: orcFailed",
var installationRes = installer.Install();
var installResult = installationRes.GetUpdateResult(0);
Обновление устанавливается очень хорошо, если я вручную дважды щелкаю по исполняемому файлу и устанавливаю его вручную без использования кода.