【问题标题】:Using WUAPI to quietly install updates in C#在 C# 中使用 WUAPI 悄悄地安装更新
【发布时间】:2011-10-30 04:54:24
【问题描述】:

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

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

感谢您的帮助。

【问题讨论】:

  • 您是否尝试过使用 IUnknown::QueryInterface 查看从 CreateUpdateInstaller 返回的对象是否提供 IUpdateInstaller2 接口以及 IUpdateInstaller 接口?

标签: c# windows windows-update


【解决方案1】:

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

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

感谢您的帮助

【讨论】:

    【解决方案2】:

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

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

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

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

      IUpdateInstaller2 installer = new UpdateInstaller();
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-23
        • 1970-01-01
        • 2015-02-14
        • 2019-02-17
        • 2018-03-26
        • 2019-11-22
        • 2015-11-26
        相关资源
        最近更新 更多