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

时间:2011-08-18 22:27:57

标签: c# windows windows-update

我正在尝试创建一个可以静默处理更新的程序。我正在使用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类(我从第二篇帖子here得到了它),但是对于我的生活,我找不到获取IUpdateInstaller2对象的方法。似乎没有任何东西返回,Microsoft的文档不包含任何示例代码。广泛的谷歌搜索没有任何用处。

我认为我非常接近 - 功能就在那里,我无法完全访问它。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

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

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

感谢您的帮助

答案 1 :(得分:0)

我在另一个问题中发布了我的应用,搜索,下载并安装了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();
在事件发生之后

。例如,如果未找到任何更新,则关闭应用程序。我使用接口的异步属性,因此它可以执行异步所需的操作。

希望这有帮助。

答案 2 :(得分:0)

我也找了很久。 你只需要投射它

IUpdateInstaller2 installer = new UpdateInstaller();

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