3

WindowsUpdateを自動的にダウンロードしてインストールするコードを書いています。(「tlbimped」wuapi.dllとインターネット上で見つかったいくつかのサンプルコードを使用)。

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);
}

アイテムがnullではなく、ダウンロードされます。インストールできますが、指定したパスにコピーできません。

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 に答える