2011-11-21 34 views
0

我有一些問題讓WUA API按預期運行。 我想手動將更新文件複製到一臺機器,然後將其提供給WUA。 調用IUpdate2.CopyToCache會導致一個令我困惑的錯誤。該更新完全正確。使用甚至不存在的文件名也會導致相同的錯誤!WUA IUpdate2.CopyToCache拋出WU_E_INVALID_UPDATE_TYPE

我還注意到另外一件奇怪的事情:我搜索了一個更新並在API中找到它,但是將它寫入磁盤根本不起作用。代碼執行並且沒有錯誤報告,但目錄保持空白。

IUpdateSearcher updateSearcher = new UpdateSearcher(); 
updateSearcher.Online = true; 

ISearchResult searchResult = updateSearcher.Search("UpdateID='" + wsusID + "'"); 
if (searchResult.ResultCode == OperationResultCode.orcSucceeded && searchResult.Updates.Count == 1) 
{ 
    IUpdate update = searchResult.Updates[0]; 
    Console.WriteLine(update.KBArticleIDs[0]); 
    Console.WriteLine(update.Title); 
    Console.WriteLine(update.Identity.UpdateID); 
    Console.WriteLine("IsInstalled=" + update.IsInstalled); 
    Console.WriteLine("IsDownloaded=" + update.IsDownloaded); 

    // this line does nothing     
    update.CopyFromCache("C:\\Test\\", true); 

    // this returns error code 0 
    int errorCode = Marshal.GetLastWin32Error(); 
    var update2 = (IUpdate2)update; 
    var s = new StringCollection(); 
    // this file has been manually downloaded and exists! 
    s.Add(@"C:\test\Windows6.1-KB2518869-x64.msu"); 

    // this throws the exception (0x80240026 - WU_E_INVALID_UPDATE_TYPE) 
    update2.CopyToCache(s); 
} 

爲什麼CopyFromCache沒有做任何事情,爲什麼CopyToCache拋出這個奇怪的異常,即使該文件不存在?

API參考:http://msdn.microsoft.com/en-us/library/windows/desktop/aa386101(v=VS.85).aspx

回答

3

與您的代碼的問題是,指定的更新是不是一個真正的更新。 它是一組更新的容器。嘗試將該文件複製到緩存以獲取捆綁更新。

// Example 
    Console.WriteLine("Bundled update=" + update.BundledUpdates[0].Title); 
    var s = new StringCollection(); 
    s.Add(@"C:\test\Windows6.1-KB2518869-x64.msu"); 
    ((IUpdate2)update.BundledUpdates[0]).CopyToCache(s); 
+0

這不會總是工作。有時索引需要「1」,有時需要「2」... – Dayan

相關問題