2011-08-25 72 views
3

我正在编写代码以自动下载&安装Windows更新。 (使用“tlbimped”wuapi.dll以及通过Internet找到的一些示例代码)。Windows Update API c#:设置下载位置

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

项不为空,则下载可进行但不能复制到指定的路径

+2

欢迎来到StackOverflow。 “它对我不起作用”是没用的。这到底是什么意思呢?你收到错误信息吗?如果是这样,邮件的*确切*文本是什么?没有这些信息,你的问题很难回答。请记住,我们无法从这里看到你的显示器,而且大多数人的ESP还不够强大,无法在整个世界中工作。 :)请编辑您的问题,并添加更多关于您正在使其工作的特定问题的信息,以便我们可以尝试和帮助您。 –

+0

对不起延迟。 “它对我不起作用”意味着该方法执行时没有任何错误。而且什么都没有发生。我看不到添加到“路径”目录中的文件。 –

+0

@Ken White,很抱歉,我没有提供详细信息。现在一切都好(我希望) –

回答

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。“