Help Library Manager and error 0x80190194
Sat, Nov 13 2010 9:58
Yesterday I noticed that the Windows Phone content had been updated online, but my local help library didn’t have the new content. So I thought I’d just open up Help Library Manager and update my local content. Sadly it wasn’t that simple. Help Library Manager would only let me update the entire collection, a process it never managed to complete. Each time help library manager failed it would have to start all over again, again saying it had to download about 2 GB of files.
The solution : In the end, after a dozen or more attempts spanning most of the afternoon, I gave up and uninstalled all my existing help content. This allowed me to add back the books I wanted one by one and have them update when added.
The problem : When the help library manager does its updates, it doesn’t allow you to select an individual book, instead it demands to update all books. And if any download fails, it aborts the entire process. The error message you get is:
If you look in the Windows Application logs (via Event Viewer), you’ll find error messages such as :
An error occurred while updating local content: Microsoft.Help.CacheLib.CacheLibDownloadException: An error occurred while the BITS service was transferring 'http://packages.mtps.microsoft.com/visual_studio_22759845_vs_100_en-us_6(e46593e9-d0e9-0b05-536f-729a38c64fa1).cab' to 'C:\ProgramData\Microsoft\HelpLibrary\content\Microsoft\incoming\36d8cf67-0d25-406f-8a5e-3b6143bc3769\Visual_Studio_22759845_VS_100_en-us_6.cab'. The error context was 'RemoteFile', and the error code was '0x80190194'.
Searching for 0x80190194 and Help Library Manager won’t bring you much joy (hopefully this blog post might change that).
A bit of an insight might be able to be inferred from the event log. It says the error occurred at :
at Microsoft.Help.CacheLib.DocumentationCache.<>c__DisplayClass6c.<DownloadWebContent>b__69(IGrouping`2 chunk)
at Microsoft.Help.CacheLib.Extensions.Each[T](IEnumerable`1 that, Action`1 lambda)
at Microsoft.Help.CacheLib.DocumentationCache.DownloadWebContent(IEnumerable`1 webDownloads, Int32 totalDownloads, Int32 completedDownloads, String workingDirectory, StatusCallback`1 statusCallback)
Note: I’m only guessing here as I haven’t seen the code, by my guess is there is no individual error handling in the Action lambda. It’s a if one fails the lot fails approach. I always think this is something to be wary of with enumerable and lambda expressions. Simple lambdas look clean and elegant but often aren’t robust. The result is all or not at all. And when that result is “not at all” most of the time, then we’ve got a problem.
So the workaround I employed was to limit the collection to start off with. This limited the “all” to a workable set. But there’s lots more the team responsible for the Help Library Manager should do (IMO).
- First thing to do is publish a KB and blog post about error 0x80190194, and let people know what is going on (and what the team plans to do about it) and suggest workarounds (like above).
- Fix the code. Add robust error handling that internally retries the download multiple times; and split it up so as the downloads that have succeeded are installed. Get over and get past the lazy all or not at all approach.
- Fix the UI. Apart from the antiquated fixed dialogue window (instead of modern resizable), the UI should allow updating of individual books (aka products). If I want the latest Windows Phone documentation right NOW, I don’t want to be waiting until all the other updates apply.
- Provide downloads that can be installed offline. If you have multiple computers, you don’t want to be downloading 2GB for each one.