C # WUApiLib знает, нуждается ли центр обновления Windows в перезапуске

#c# #.net #wuapi

#c# #.net #wuapi

Вопрос:

Я использую этот код для получения ожидающих обновлений Windows, а также большей части информации об обновлении:

  static List<PendingUpdate> GetPendingUpdates()
    {
        var updateSession = new UpdateSession();
        var updateSearcher = updateSession.CreateUpdateSearcher();
        updateSearcher.Online = false; //set to true if you want to search online

        List<PendingUpdate> pendingUpdates = new List<PendingUpdate>();
        try
        {
            var searchResult = updateSearcher.Search("IsInstalled=0 And IsHidden=0");
            if (searchResult.Updates.Count > 0)
            {
                Console.WriteLine("There are updates available for installation");

                foreach (IUpdate windowsUpdate in searchResult.Updates)
                {
                    PendingUpdate update = new PendingUpdate();
                    update.Title = windowsUpdate.Title;
                    update.Description = windowsUpdate.Description;
                    update.Downloaded = windowsUpdate.IsDownloaded;
                    update.Urls = new List<string>();
                    foreach (string url in windowsUpdate.MoreInfoUrls)
                    {
                        update.Urls.Add(url);
                    }
                    foreach (dynamic category in windowsUpdate.Categories)
                    {
                        update.Categories  = category.Name   ", ";
                    }
                    pendingUpdates.Add(update);
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("ERROR");
            throw ex;
        }

        return pendingUpdates;
    }
  

Я также использую этот код, чтобы узнать, требуется ли в настоящее время перезагрузка компьютера для завершения установленных обновлений:

  static bool needsRestart()
    {
        ISystemInformation systemInfo = new SystemInformation();
        return systemInfo.RebootRequired;
    }
  

Теперь мой вопрос в том, можно ли узнать, требует ли ожидающее обновление перезагрузки компьютера для завершения? В первом коде я получаю объект IUpdate, но я не вижу информации о необходимом перезапуске после установки этого обновления. Есть ли способ получить эту информацию?

Комментарии:

1. Ваш windowsUpdate объект должен иметь InstallationBehavior.RebootBehavior свойство типа InstallationRebootBehavior . Это может быть либо irbAlwaysRequiresReboot , irbCanRequestReboot либо irbNeverReboots .

Ответ №1:

Для асинхронной установки я использую что-то вроде этого:

 rebootRequired = false;

UpdateSession updateSession = new UpdateSession();
updateSession.ClientApplicationID = SusClientID;

IUpdateInstaller updatesInstaller = updateSession.CreateUpdateInstaller();
IInstallationJob job = updatesInstaller.BeginInstall(InstallProgressCallback, installComplete, installState);

// here is your installer code and the checking if the installation is completed

IInstallationProgress jobProgress = job.GetProgress();

for (int updateindex = 0; updateindex < updatesInstaller.Updates.Count; updateindex  )
{
    IUpdateInstallationResult updateInstallResult = jobProgress.GetUpdateResult(updateindex);

    rebootRequired |= updateInstallResult.RebootRequired;
}

if(rebootRequired)
{
    // any of the updates need a reboot
}