我正在尝试创建一个可以静默处理更新的程序。我正在使用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的文档不包含任何示例代码。广泛的谷歌搜索没有任何用处。
我认为我非常接近 - 功能就在那里,我无法完全访问它。
感谢您的帮助。
答案 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 的功能我从未在某处找到。