Использование WUAPI для тихой установки обновлений в C # - PullRequest
0 голосов
/ 19 августа 2011

Я пытаюсь создать программу, которая будет обрабатывать обновления без вывода сообщений.Я использую wuapilib.dll, который поставляется с рядом классов (c #).Моя первая версия программы была следующей (не обращайте внимания на проблемы с опечатками - на другом компьютере без доступа в Интернет, поэтому я печатаю его вручную):

IUpdateSession mySess = new UpdateSession();
IUpdateSearcher mySear = mySess.CreateUpdateSearcher();
ISearchResult myRes = mySear.Search("Type='Software'");
IUpdateDownloader myDown = mySess.CreateUpdateDownloader();
IUpdateInstaller myInst = mySess.CreateUpdateInstaller();

myDown.Updates = myRes.Updates;
myDown.Download();
myInst.Updates = myRes.Updates;
myInst.Install();

Игнорировать случай, когда обновление уже загружено илиустановлен, я опускаю логику выше.Моя проблема в том, что IUpdateInstaller не позволяет вам выполнить тихую установку - ряд обновлений требует, чтобы пользователь щелкнул окно подтверждения.Класс IUpdateInstaller2 делает (я получил это из второго поста вниз здесь ), но я не могу найти способ получить объект IUpdateInstaller2.Кажется, ничего не вернуть, и документация Microsoft не содержит примеров кода.Обширные поиски в Google ничего не дали.

Я думаю, что я действительно близок - функциональность есть, я просто не могу получить к ней доступ.

Спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 22 августа 2011

Я проверил это (точнее, я думаю, что сделал - не слишком ясно, как заставить его работать), и похоже, что CreateUpdateInstaller возвращает только IUpdateInstaller, ничего больше.

Однако янашел код (на китайском веб-сайте, что довольно интересно), который просто напрямую приводил IUpdateInstaller к IUpdateInstalelr2, который решил мои проблемы.

Спасибо за помощь

0 голосов
/ 28 февраля 2013

Я разместил в другом Вопросе мое приложение для поиска, загрузки и установки обновлений Windows.

См .: C # и WUAPI: функция BeginDownload

Вы можете легко изменить:

static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.SetCompatibleTextRenderingDefault(false);
Application.EnableVisualStyles();

Thread thread = new Thread(() =>
{
Form1 form1 = new Form1();
form1.Visible = false;
form1.ShowInTaskbar = false;
Application.Run(form1);
});

thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
}

затем обработать

Application.Close();

после того, как события сделали свое дело. Например, если обновлений не найдено, закройте приложение. Я использую асинхронные свойства интерфейсов, чтобы он мог делать то, что ему нужно для асинхронизации.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...