Monday, March 30, 2009

Error Accessing and Displaying CHM Files: Reasons and Solutions

Error Accessing and Displaying CHM Files: Reasons and Solutions
By Dennis Crane

So, you've got in trouble. Some or even all of your CHM files seem to have gotten corrupted. They show a "The page cannot be displayed" error in the left-hand pane of the CHM viewer. There are several possible reasons why your CHM e-books and documentation files are unreadable.

The CHM viewer component is not properly registered on your PC
The system file \system32\hhctrl.ocx may get missing, corrupted, or unregistered.

Solution: Run "regsvr32 hhctrl.ocx" command from the command line to register the library in the system.


Your CHM files are stored in the folder with '#' (hash) character in the path
Many C# developers discovered that their documentation and e-books in CHM format cannot be read because they were storing their CHM files in the directories like 'C:\E-books\C#\'
The hash character signifies an anchor in HTML so the CHM viewer fails to resolve the path properly and to retrieve the content.

Solution: Remove the '#' (hash) character from the directory name. Also avoid using '?', '&', and '+' characters in directory names.

A security update for Windows XP® may block access to CHM files
Windows XP® security update blocks active content in CHM files to protect your system security. Additional information is available here.

Solution: Run Windows Explorer, right-click on the CHM file, and select Properties from the popup menu. Click on the Unblock button immediately below the Advanced button on the General page. Click Apply to show the content. Once the CHM file has been unblocked, the Unblock button disappears.


The CHM file is in the restricted Internet zone
When a CHM file that you are trying to access is stored remotely, e.g. on the network drive or on a remote server, you may also get in trouble. If the associated security zone is restricted, then CHM files won't be displayed as well.

Solution: Modify the ItssRestrictions registry entry to enable a specific security zone.
Follow these steps:
1. Run 'regedit' command from the command line.
2. Locate and then click the following subkey:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\ItssRestrictions
Note: If this registry subkey does not exist, then create it.
3. Right-click the ItssRestrictions subkey, point to New, and then click DWORD Value.
4. Type MaxAllowedZone, and then press ENTER.
5. Right-click the MaxAllowedZone value, and then click Modify.
6. In the Value data box, type a number from 0 and 4, and then click OK.
The values settings are
0 = My Computer
1 = Local Intranet Zone
2 = Trusted sites Zone
3 = Internet Zone
4 = Restricted Sites Zone

For most CHM files, the value of 1 should be enough to allow use without opening up access from/to remote CHM files in email/internet locations.
7. Quit Registry Editor.

Warning Enable only those security zones that you trust. Do not enable security zones about which you are not sure.

No comments: