我正在尝试创建一个静默处理更新的程序。我使用的是带有许多类(c#)的wuapilib.dll。我对程序的第一次修改如下(忽略打字错误问题-它在另一台没有互联网接入的计算机上,所以我要手动输入它):
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类做到了(我从here的第二篇文章中得到了这一点),但我一直找不到一种方法来获取IUpdateInstaller2对象。似乎没有任何内容返回,而且Microsoft的文档中也没有包含任何示例代码。广泛的谷歌搜索没有任何用处。
我想我真的很接近了--功能就在那里,我只是不能完全访问它。
谢谢你的帮助。
发布于 2011-08-22 23:35:37
我检查了一下(或者更确切地说,我想我检查过了--不太清楚如何让它工作),看起来CreateUpdateInstaller只返回了一个IUpdateInstaller,其他什么都没有。
然而,我发现代码(在一个中文网站上,有趣的是)直接将IUpdateInstaller转换为IUpdateInstalelr2,这解决了我的问题。
谢谢你的帮助
发布于 2013-02-28 11:19:38
我在另一个问题中发布了我的应用程序,搜索,下载,然后安装Windows更新。
请参阅:C# and WUAPI: BeginDownload function
您可以轻松地更改:
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();在事件做完他们的事情之后。例如,如果未找到任何更新,则关闭应用程序。我使用接口的异步属性,以便它可以执行异步所需的操作。
希望这能有所帮助。
发布于 2021-06-08 16:58:49
我也找了很长时间。你只需要把它转换成
IUpdateInstaller2 installer = new UpdateInstaller();根据Microsoft文档,还有版本3和4可用。但这肯定是个错误。版本3的函数在IUpdateInstaller2中也可用,而版本4的函数我从未在任何地方找到过。
https://stackoverflow.com/questions/7114913
复制相似问题