0

我正在尝试创建一个可以静默处理更新的程序。我正在使用 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 的文档不包含任何示例代码。广泛的谷歌搜索没有返回任何用处。

我想我真的很接近 - 功能就在那里,我只是无法访问它。

谢谢你的帮助。

4

3 回答 3

1

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

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

谢谢您的帮助

于 2011-08-22T15:35:36.973 回答
0

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

在事件完成他们的事情之后。例如,如果没有找到更新,则关闭应用程序。我使用接口的异步属性,因此它可以执行异步所需的操作。

希望这可以帮助。

于 2013-02-28T03:19:37.900 回答
0

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

IUpdateInstaller2 installer = new UpdateInstaller();

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

于 2021-06-08T08:58:48.823 回答