使用WUApiLib脱机安装Windows更新

时间:2018-03-13 16:23:01

标签: c# windows-update wuapi

我正在寻找一些帮助,使用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;
        }
    }
}

1 个答案:

答案 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/之类的内容来帮助您获取更新。