gpt4 book ai didi

c# - WUApiLib IUpdateInstaller2 产生错误;一些操作系统更新安装其他人抛出 HResult -2145124318

转载 作者:太空狗 更新时间:2023-10-29 20:33:56 28 4
gpt4 key购买 nike

正在从本地服务器而非 WUS 或 Microsoft 存储库下载更新。本地服务器是基于 Linux 的主机每次更新的内容。

我没有使用 UpdateDownloader 从 Microsoft 服务器下载,我手动下载更新内容然后使用 CopyToCache

这些安装正常

Windows XP、Server 2003、Vista、Server 2008 x86 上的 Microsoft .NET Framework 3.5 SP1 安全更新 (KB2736416)

Microsoft Visual Studio 2010 安全更新 (KB2542054)

这些没有

Security Update for Microsoft .NET Framework 4 on XP, Server 2003, Vista, Windows 7, Server 2008 x86 (KB2840628)

Windows XP、Server 2003、Vista 和 Server 2008 x86 上的 Microsoft .NET Framework 3.5 SP1 更新 (KB2836940)

我的流程如何运作

我从本地服务器收到此安装文件,我用它来下载更新的所有下载内容。 (KB2840628 上面的 block 引用文本是下面提供的示例)

{
"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<string> 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);

如果我手动双击可执行文件并在不使用代码的情况下手动安装,则更新安装会很好。

最佳答案

似乎 WUApi 公开了 IUpdate,它包含多个级别的 bundleUpdates。之前,我只是简单地检索 bundleUpdates 的顶层,这样做会导致某些更新因缺少更新所需的内容而失败;大多数 Windows 更新都有超过 1 级的 bundle 。

例如,假设这个树状结构用于 1 个更新(又名 IUpdate):

Update 1
---> Bundle 1
*URL 1
*URL 2
----> Bundle 1A
*URL 1
*URL 2
*URL 3

---> Bundle 2
*URL 1
----> Bundle 2A
*URL 1
*URL 2
----> Bundle 2B
*URL 1

----> Bundle 3
*URL 1
----> Bundle 3A
*URL 1
*URL 2

我的解决方案是创建一个递归函数来单独解析每个更新,并将所有 URI 保存在键类型为“bundleName”和值列表的字典中保存该特定包的所有 URI。

像这样:

Dictionary<string, List<string>>

递归函数如下:

 private static Dictionary<string, List<string>> GetAllUpdates(IUpdate iUpdate)
{
var bundleDict = new Dictionary<string, List<string>>();

foreach (IUpdate bundle in iUpdate.BundledUpdates)
{
foreach (IUpdateDownloadContent udc in bundle.DownloadContents)
{
var downloadContents = new List<string>();
if (String.IsNullOrEmpty(udc.DownloadUrl))
continue;

var url = udc.DownloadUrl;
downloadContents.Add(url);

if (!bundleDict.ContainsKey(bundle.Title))
bundleDict.Add(bundle.Title, downloadContents);
}

if (bundle.BundledUpdates.Count > 0)
{
var valuesReturned = GetAllUpdates(bundle);
foreach (var data in valuesReturned)
{
if(!bundleDict.ContainsKey(data.Key))
bundleDict.Add(data.Key, data.Value);
}

}
}

return bundleDict;
}

关于c# - WUApiLib IUpdateInstaller2 产生错误;一些操作系统更新安装其他人抛出 HResult -2145124318,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18990450/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com