Windows Update API c #: установить место загрузки - PullRequest
3 голосов
/ 26 августа 2011

Я пишу код для автоматической загрузки и установки обновлений Windows. (с использованием «tlbimped» wuapi.dll и некоторого примера кода, найденного через Интернет).

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

И это нормально - я успешно могу загрузить и установить обновление. Но я предпочитаю кэшировать элементы и не загружать их, если этот элемент уже существует в «специальной» папке. Google говорит, что я могу использовать:

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

Элемент не нулевой, загружен. Может быть установлен, но не может быть скопирован по указанному пути.

1 Ответ

2 голосов
/ 01 сентября 2011

Решение довольно простое - мы должны скопировать дочерние (в комплекте) обновления вместо основных (родительских).

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. "

...