Установка обновлений Windows в автономном режиме с использованием WUApiLib

Мне нужна помощь в автоматизации установки обновлений Windows с помощью файла wsusscn2.cab, доступного на веб-сайте Microsoft.

Настройка, на которую я пытаюсь реализовать это, немного странная, поэтому я думаю, что не могу найти много помощи с помощью Google.

У меня есть 8 машин под управлением Windows 7 SP1, которые не могут быть подключены к Интернету, поэтому я загружаю файл wsusscn2.cab от Microsoft, который, очевидно, содержит список всех выпущенных обновлений и сами фактические обновления / исправления.

Код, который у меня есть, позволяет мне использовать WUApiLib для чтения CAB-файла и установить из него, какие обновления не установлены на компьютере. В настоящее время возвращается список из 149 обновлений, которые доступны, но не установлены.

При проверке функции.IsDownloaded() каждого обновления / исправления возвращается False, а код ошибки - orcFailed.

Это настолько близко, насколько я могу себе представить, как я уже говорил с моей установкой, Google не предоставляет мне большой помощи, так как большинство людей упоминают такие вещи, как WSUS на Windows Server, что невозможно, или другие онлайн-решения, которые также что-то, что я не могу сделать.

Вот фрагмент кода, который у меня есть, я новичок в этой библиотеке, и это мой первый крупный проект на 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 ответ

Возможно, вы не загружаете обновления из 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 является CAB-файлом, подписанным Microsoft. Этот файл содержит информацию об обновлениях, связанных с безопасностью, которые публикуются Microsoft. Компьютеры, которые не подключены к Интернету, можно сканировать, чтобы увидеть, присутствуют или требуются эти обновления, связанные с безопасностью. Файл Wsusscn2.cab не содержит самих обновлений безопасности, поэтому вы должны получить и установить все необходимые обновления, связанные с безопасностью, другими способами. Новые версии файла Wsusscn2.cab периодически выпускаются по мере выпуска, удаления или изменения связанных с безопасностью обновлений на сайте Центра обновления Windows.

Wsusscn2.cab не содержит актуальных обновлений, которые он только что использовал для сканирования. Вам нужно будет загрузить все эти обновления, а затем запустить установщик для загруженных обновлений. Вы можете использовать что-то вроде http://download.wsusoffline.net/ чтобы помочь вам получить обновления.

Другие вопросы по тегам