3

我正在编写代码来自动下载和安装 Windows 更新。(使用“tlbimped”wuapi.dll 和一些在 Internet 上找到的示例代码)。

UpdateDownloader updateDownloader = Sesion.CreateUpdateDownloader();
updateDownloader.Updates = new UpdateCollection() { Item };                      
updateDownloader.BeginDownload(this, this, this);

很好 - 我可以成功下载并安装更新。但是,我更喜欢缓存项目,如果该项目已经存在于“特殊”文件夹中,则不要下载它们。谷歌说,我可以使用:

IUpdate.CopyFromCache(path, true);

但这对我不起作用:(

这是示例代码

IUpdate Item { get; set; }
public UpdateSession Sesion { get; set; }

void CopyToFolder()
{
 string path=Environment.CurrentDirectory + @"\Updates";

 DirectoryInfo di = new  DirectoryInfo(path);

 if (!di.Exists) Directory.CreateDirectory(path);

 Item.CopyFromCache(path, true);
}

项目不为空,已下载。可以安装,但不能复制到指定路径。

4

1 回答 1

2

解决方案很简单——我们应该复制子(捆绑)更新而不是主(父)更新。

foreach (IUpdate child in Item.BundledUpdates)
{
   child.CopyFromCache(path, false);
}

这正是 IUpdate 接口页面的备注部分中指出的答案:

http://msdn.microsoft.com/en-us/library/aa386099(v=VS.85).aspx

“如果 BundledUpdates 属性包含 IUpdateCollection,则更新的某些属性和方法可能仅在捆绑更新上可用,例如,DownloadContents 或 CopyFromCache。”

于 2011-09-01T18:19:06.673 回答