C#wuapilib - Windows更新(控制台应用程序)失败 - 无效的强制转换异常

时间:2013-07-19 14:52:54

标签: c# exception casting install

环境:

Microsoft Visual Studio 2010 SP1

C# - .NET 4.0

问题:
一切正常,除了安装。

经过深思熟虑和研究后,我怀疑这个问题是一个企图从“ - 类型'System .__ ComObject'的COM对象转换为接口类型'WUApiLib.UpdateInstaller'。”可以在代码中可以看到,IID和类型已经设置但是参数的值是可疑的。以下是运行时错误报告:

  

发现了System.InvalidCastException。消息=指定的强制转换不是   有效。 Source = PROGRAM_NAME StackTrace:          在WUApiLib.IUpdateInstaller.Install()          在%PATH%\ visual studio 2010 \ Projects \ ...中的PROGRAM_NAME.WindowsUpdates.InstallUpdates(UpdateCollection updatesToInstall)   的InnerException:

请求

经过数小时的研究和研究,我们将非常感谢您解决安装更新问题的任何帮助。请参阅以下代码段。

程序会尝试以下操作:

- 启用了Windows更新服务(没问题)

- 需要更新主机:(没问题)

- 下载更新:(没问题)

public static UpdateCollection DownloadUpdates()
{
    // Returns UpdateCollection object. 
}

- 尝试安装更新。 (例外:指定演员表无效。)

public static void InstallUpdates(UpdateCollection updatesToInstall)
{

     IUpdateInstaller updateInstaller;
     Console.WriteLine("Creating UpdateInstasller...");

    //Type itype = Type.GetTypeFromProgID("Microsoft.Update.Session", true);
    //Type t = Type.GetTypeFromProgID("Microsoft.Update.Session", "127.0.0.1")
    Type itype = Type.GetTypeFromProgID("Microsoft.Update.Installer", true);

    updateInstaller = (UpdateInstaller)Activator.CreateInstance(itype);
    updateInstaller.Updates = updatesToInstall;
    updateInstaller.ClientApplicationID = "{3442D4FE-224D-4CEE-98CF-30E0C4D229E6}"; //    Unsure of IID
    IInstallationResult installationResult;
    Console.WriteLine("Creating UpdateInstallationResult...");
    updateInstaller.IsForced = true;

    if (updateInstaller.IsBusy == false)
    {
       try
       {
          installationResult = updateInstaller.Install(); // ***Bad Cast exception here.***
          if (updatesToInstall.Count > 0)
          {
              for (int i = 0; i < updatesToInstall.Count; i++)
              {
               if (installationResult.GetUpdateResult(i).HResult == 0)
                         Console.WriteLine("Installed : " + updatesToInstall[i].Title);
                    else
                         Console.WriteLine("Failed : " + updatesToInstall[i].Title);

                    // Is Reboot Required?
                    if (installationResult.RebootRequired == true)
                        Console.WriteLine("Reboot is required for one of more updates.");
               } // end for
          } // end if 
        } // end try
        catch (Exception e)
        {
           Console.WriteLine("Error:: " + e.Message + "\n");
        }

    } // end if
} // end method

0 个答案:

没有答案