使用WUAPI在c#中安静地安装更新

本文关键字:安装 更新 安静 WUAPI 使用 | 更新日期: 2023-09-27 18:06:08

我试图创建一个程序,将处理更新无声。我使用的是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对象的方法。似乎没有任何东西可以返回1,而且微软的文档也没有包含任何示例代码。大量的谷歌搜索没有任何有用的结果。

我想我真的很接近了——功能已经在那里了,我只是不能完全访问它。

谢谢你的帮助。

使用WUAPI在c#中安静地安装更新

我检查了(或者更确切地说,我认为我做了-不太清楚让它工作),它看起来像CreateUpdateInstaller只返回一个IUpdateInstaller,没有别的。

然而,我发现代码(在一个中文网站上,有趣的是),只是直接将IUpdateInstaller转换为IUpdateInstalelr2,这已经解决了我的问题。

Thanks for the help

我在另一个问题我的应用程序,搜索,下载,然后安装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();
}
}

then handle

Application.Close();

在事件完成它们的事情之后。例如,如果没有发现更新,那么关闭应用程序。我使用接口的async属性,这样它就可以做它需要异步的事情。

我也找了很长时间。你只需要对它进行强制转换

IUpdateInstaller2 installer = new UpdateInstaller();

根据微软文档,还有版本3和4可用。但这肯定是个错误。版本3的功能也可以在IUpdateInstaller2中使用,而版本4的功能我从未在某处找到过。