我正在通过使用 Microsoft 网站上提供的 wsusscn2.cab 文件来寻找自动安装 Windows 更新的帮助。
我试图实现的设置有点奇怪,这就是为什么我认为使用 Google 找不到太多帮助的原因。
我有 8 台运行 Windows 7 SP1 的机器无法连接到 Internet,因此我正在从 Microsoft 下载 wsusscn2.cab 文件,该文件显然包含所有已发布更新的列表以及实际更新/修补程序本身。
到目前为止,我的代码允许我使用 WUApiLib 读取 .cab 文件并从中建立,哪些更新未安装在机器上。这当前返回的列表包含大约 149 个可用但未安装的更新。
检查每个更新/修补程序的 .IsDownloaded() 函数时,它返回 False 并且错误代码为“orcFailed”。
正如我所说的那样,这是我所能得到的最接近的设置,谷歌并没有为我提供很多帮助,因为大多数人都提到了 Windows Server 上的 WSUS 之类的东西,这是不可能的,或者其他在线解决方案也是我不能做的事情。
这是我到目前为止的代码片段,我是这个库的新手,这是我的第一个主要 C# 项目,所以任何帮助将不胜感激,因为我觉得我此刻正在碰壁。有人还可以确认更新是否实际存储在 .cab 文件中,因为我尝试提取它们以查看里面的内容,但无济于事?
非常感谢!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WUApiLib;
using System.Management;
using Shell32;
namespace SoftwareUpdateTool
{
class InstallUpdates
{
public static void Getupdates()
{
UpdateSession updateSession = new UpdateSession();
UpdateServiceManager updateSM = new UpdateServiceManager();
IUpdateService updateService = updateSM.AddScanPackageService("Offline Sync Service", "C:\\Users\\Admin\\Desktop\\Windows Updates\\wsusscn2.cab");
IUpdateSearcher searcher = updateSession.CreateUpdateSearcher();
IUpdateInstaller installer = updateSession.CreateUpdateInstaller();
searcher.ServerSelection = ServerSelection.ssOthers;
searcher.ServiceID = updateService.ServiceID;
ISearchResult SearchResults = searcher.Search("IsInstalled=0");
UpdateCollection foundUpdates = SearchResults.Updates;
Console.WriteLine("Number of updates found are " + foundUpdates.Count);
installer.Updates = foundUpdates;
int updateCount = 0;
foreach (IUpdate x in foundUpdates)
{
Console.WriteLine(x.Title + " " + x.IsDownloaded.ToString());
Console.WriteLine("Error Code >> " + ConvertCode(installResult.GetUpdateResult(updateCount).ResultCode.ToString()));
updateCount += 1;
}
}
private static string ConvertCode(string errorCode)
{
switch (errorCode)
{
case "0":
errorCode = errorCode + " not started";
break;
case "1":
errorCode = errorCode + " in progress";
break;
case "2":
errorCode = errorCode + " succeeded";
break;
case "3":
errorCode = errorCode + " suceeded with errors";
break;
case "4":
errorCode = errorCode + " failed";
break;
case "5":
errorCode = errorCode + " aborted";
break;
}
return errorCode;
}
}
}