C# WUApiLib: Failing to Install Updates with 0x80240024 Even Though Updates are Found

0

I have followed instructions found on this site, which was found when I researched Stack Overflow and found this question. However, I can't seem to figure out why my code is hitting the catch block. I have a break at the IInstallationResult line, which the code hits but then goes to the catch, stating 0x80240024 (There are no updates), even though there are certainly updates available and I list them in the text box.

What am I missing here?

using System;
using System.Windows.Forms;
using WUApiLib;

namespace TEST.DetectWindowsUpdate
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void GetUpdates(bool downloadUpdates, bool installUpdates)
        {

            UpdateSession uSession = new UpdateSession();
            IUpdateSearcher uSearcher = uSession.CreateUpdateSearcher();
            UpdateCollection updatesToInstall = new UpdateCollection();
            UpdateDownloader downloader = uSession.CreateUpdateDownloader();
            IUpdateInstaller installer = uSession.CreateUpdateInstaller();

            uSearcher.Online = true;

            try
            {
                ISearchResult sResult = uSearcher.Search("IsInstalled=0 And Type='Software'");
                lblUpdateCount.Text = sResult.Updates.Count.ToString();

                foreach (IUpdate update in sResult.Updates)
                {
                    txtUpdatesList.AppendText("Title: " + update.Title + Environment.NewLine);
                    txtUpdatesList.AppendText("IsInstalled: " + update.IsInstalled.ToString() + Environment.NewLine);
                    txtUpdatesList.AppendText("Downloaded: " + update.IsDownloaded.ToString() + Environment.NewLine);
                    txtUpdatesList.AppendText("IsMandatory: " + update.IsMandatory.ToString() + Environment.NewLine);

                    txtUpdatesList.AppendText(Environment.NewLine);

                    if (downloadUpdates)
                    {
                        if (update.IsDownloaded == false)
                        {
                            do
                            {
                                downloader.Updates.Add(update);
                                downloader.Download();
                            }
                            while (update.IsDownloaded == false);

                            if (update.IsDownloaded == true)
                            {
                                updatesToInstall.Add(update);
                            }
                        }
                        else
                        {
                            updatesToInstall.Add(update);
                        }
                    }

                    if (installUpdates)
                    {
                        installer.Updates = updatesToInstall;

                        IInstallationResult installationRes = installer.Install();

                        for (int i = 0; i < updatesToInstall.Count; i++)
                        {
                            txtUpdatesList.AppendText("Installing " + updatesToInstall[i].Title + "...");
                            if (installationRes.GetUpdateResult(i).HResult == 0)
                            {
                                txtUpdatesList.AppendText("INSTALL SUCCESS FOR " + updatesToInstall[i].Title);
                            }
                            else
                            {
                                txtUpdatesList.AppendText("INSTALL FAIL FOR " + updatesToInstall[i].Title);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: " + ex.Message + ": " + ex.HelpLink);
            }
        }

        private void btnGetUpdates_Click(object sender, EventArgs e)
        {
            
            base.OnLoad(e);
            txtUpdatesList.Clear();
            GetUpdates(false, false);
        }

        private void btnInstallUpdates_Click(object sender, EventArgs e)
        {
            base.OnLoad(e);
            txtUpdatesList.Clear();
            GetUpdates(true, true );
        }
    }
}
c#
windows-update

1 Answer

0

Turns out it was an issue with privileges. I ran as administrator and it functioned appropriately.


User contributions licensed under CC BY-SA 3.0