1

我正在通过使用 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;
        }
    }
}
4

1 回答 1

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 签名的压缩文件。此文件包含有关 Microsoft 发布的安全相关更新的信息。可以扫描未连接到 Internet 的计算机以查看这些与安全相关的更新是否存在或需要。Wsusscn2.cab 文件本身不包含安全更新,因此您必须通过其他方式获取并安装任何所需的安全相关更新。Wsusscn2.cab 文件的新版本会在 Windows Update 站点上发布、删除或修订安全相关更新时定期发布。

Wsusscn2.cab 不包含它仅用于扫描的实际更新。您需要下载所有这些更新,然后针对您下载的更新运行安装程序。您可以使用http://download.wsusoffline.net/之类的内容来帮助您获取更新。

于 2018-06-02T22:59:57.953 回答