我正在寻找一些帮助,使用Microsoft网站上提供的wsusscn2.cab文件自动安装Windows更新。
我尝试实现此设置的设置有点奇怪,这就是为什么我认为我找不到使用Google的帮助。
我有8台运行Windows 7 SP1但无法连接到互联网的计算机,因此我从Microsoft下载了wsusscn2.cab文件,该文件显然包含所有已发布更新的列表以及实际的更新/修补程序本身。
我到目前为止的代码允许我使用WUApiLib来读取.cab文件并从中建立,机器上没有安装哪些更新。目前,这将返回大约149个可用但未安装的更新列表。
检查每个更新/修补程序的.IsDownloaded()函数时,它返回False,错误代码为'orcFailed'。
这是我能得到的尽可能接近,就像我说的那样,谷歌没有给我提供很多帮助,因为大多数人都提到像Windows服务器上的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;
}
}
}
答案 0 :(得分:1)
在安装之前,您可能无法从.cab文件下载更新。通过网络下载更新时,我使用了类似的内容。
`/// <summary>
/// Downloads list up updates or update
/// </summary>
/// <param Update Collection="uCollection"></param>
public void Download(UpdateCollection uCollection)
{
//creates new Downloader
UpdateDownloader uDownloader = new UpdateDownloader();
//Sets Downloader updates
uDownloader.Updates = uCollection;
//Downloads the updates
uDownloader.Download();
}`
您需要检查它们是否已下载,然后尝试运行安装程序
修改强>
来自:https://msdn.microsoft.com/en-us/library/windows/desktop/aa387290(v=vs.85).aspx
Wsusscn2.cab文件是由Microsoft签名的cabinet文件。此文件包含有关Microsoft发布的与安全相关的更新的信息。可以扫描未连接到Internet的计算机,以查看是否存在这些与安全相关的更新。 Wsusscn2.cab文件本身不包含安全更新,因此您必须通过其他方式获取并安装任何所需的安全相关更新。在Windows Update站点上发布,删除或修订与安全相关的更新时,会定期发布新版本的Wsusscn2.cab文件。
Wsusscn2.cab不包含刚刚用于扫描的实际更新。您需要下载所有这些更新,然后针对您下载的更新运行安装程序。您可以使用http://download.wsusoffline.net/之类的内容来帮助您获取更新。