J'essaie d'ouvrir un fichier .chm.
J'ai téléchargé la source, l'ai extraite et double-cliquée sur Waffle.chm
et cliquez sur "Ouvrir", mais quel que soit l'élément dans le fichier chm sur lequel je clique, le message suivant s'affiche:
Navigation to the webpage was canceled.
What you can try:
Retype the address.
Que se passe t-il ici?
Résumé
Les mises à jour de sécurité Microsoft 896358 et 840315 bloquent l'affichage du contenu du fichier CHM lorsqu'il est ouvert à partir d'un lecteur réseau (ou d'un chemin UNC ). C’est la tentative de Windows d’empêcher les vecteurs d’attaque de virus/programmes malveillants d’infecter votre ordinateur et elle a bloqué le fichier .chm qui tire des données via le protocole "InfoTech", utilisé par ce fichier chm.
Résumé de Microsoft sur le problème: http://support.Microsoft.com/kb/896054
Solutions
Si vous utilisez Windows Server 2008, Windows 7, Windows a créé une solution rapide. Faites un clic droit sur le fichier chm et vous obtiendrez la boîte de dialogue "Propriétés de yourfile.chm". En bas, un bouton appelé "Débloquer" apparaît. Cliquez sur Débloquer et appuyez sur OK, et essayez d'ouvrir le fichier chm à nouveau, cela fonctionnera correctement. Cette option n'est pas disponible pour les versions antérieures de Windows antérieures à Windows XP (SP3).
Résolvez le problème en déplaçant votre fichier chm hors du lecteur réseau. Vous ne savez peut-être pas que vous utilisez un lecteur réseau. Vérifiez bien: faites un clic droit sur votre fichier .chm, cliquez sur les propriétés et regardez le champ "emplacement". Si cela commence par deux barres obliques inverses comme ceci: \\epicserver\blah\
, vous utilisez alors un lecteur en réseau. Donc, pour résoudre ce problème, copiez le fichier chm et collez-le dans un lecteur local, comme C:\ou E:. Ensuite, essayez de rouvrir le fichier chm, Windows ne panique pas.
En dernier recours, si vous ne pouvez pas copier/déplacer le fichier hors du lecteur en réseau. Si vous devez l'ouvrir là où il se trouve et que vous utilisez une version plus petite de Windows telle que XP, Vista, ME ou autre, vous devrez indiquer manuellement à Windows de ne pas paniquer à propos de ce fichier .chm. HHReg (Utilitaire d’enregistrement de l’aide HTML) Utilitaire automatise cette tâche. En gros, vous téléchargez l’utilitaire HHReg, chargez votre fichier .chm, appuyez sur OK et il créera les clés de registre nécessaires Windows ne pas le bloquer. Pour plus d'informations: http://www.winhelponline.com/blog/fix-cannot-view-chm-files-network-xp-2003-Vista/
Windows 8 ou 10? -> Mise à niveau vers Windows XP.
"débloquer" le fichier corrige le problème. Capture d'écran:
Gagnez 8 x64:
déplacez-le simplement dans un autre dossier ou renommez votre dossier (dans mon cas, mon dossier était "c #"). évitez d'utiliser le symbole sur le nom du dossier. nommez-le avec une lettre.
terminé.
En plus de la réponse d'Eric Leschinski, et parce qu'il s'agit de stackoverflow, une solution de programmation:
Windows utilise des fourchettes de fichiers cachées pour marquer le contenu comme "téléchargé". Leur tronquage débloque le fichier. Le nom du flux utilisé pour les CHM est "Zone.Identifier". On peut accéder aux flux en ajoutant: streamname lors de l’ouverture du fichier. (conservez les sauvegardes la première fois, au cas où votre RTL le gâcherait!)
À Delphi, cela ressemblerait à ceci:
var f : file;
begin
writeln('unblocking ',s);
assignfile(f,'some.chm:Zone.Identifier');
rewrite(f,1);
truncate(f);
closefile(f);
end;
On me dit que sur les systèmes de fichiers non liés (comme FAT32), il y a des fichiers cachés, mais je ne suis pas encore au fond de cela.
P.s. La méthode DeleteFile () de Delphi devrait également reconnaître les forks.
La solution définitive est de permettre au protocole InfoTech de fonctionner dans la zone intranet.
Ajoutez la valeur suivante au registre et le problème devrait être résolu:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\ItssRestrictions]
"MaxAllowedZone"=dword:00000001
Plus d'informations ici: http://support.Microsoft.com/kb/896054
Aller au début
Tapez regsvr32 hhctrl.ocx
Vous devriez recevoir un message de réussite du type:
"DllRegisterServer dans hhctrl.ocx a réussi"
Maintenant, essayez de rouvrir votre fichier CHM.
une autre méthode consiste à utiliser un logiciel tiers différent. Ce lien montre plus de logiciels tiers pour afficher les fichiers chm ...
J'ai essayé avec SumatraPDF et cela fonctionne bien.
J'ai corrigé cela par programme dans mon logiciel, en utilisant C++ Builder.
Avant d’attribuer le fichier d’aide CHM, Application->HelpFile = HelpFileName
, Je vérifie s'il contient le flux "Zone.Identifier" et, le cas échéant, je le supprime simplement.
String ZIStream(HelpFileName + ":Zone.Identifier") ;
if (FileExists(ZIStream))
{ DeleteFile(ZIStream) ; }
Il y a apparemment différents niveaux d'authentification. La plupart des articles que j'ai lus vous conseillent de définir MaxAllowedZone sur "1", ce qui signifie que les zones d'ordinateur local et d'intranet sont autorisées, mais que "4" autorise l'accès à toutes les zones.
Pour plus d'informations, lisez cet article: https://support.Microsoft.com/en-us/kb/892675
Voici à quoi ressemble mon registre (je n'étais pas sûr que cela fonctionnerait avec les cartes de remplacement, mais cela semble fonctionner pour moi):
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\ItssRestrictions]
"MaxAllowedZone"=dword:00000004
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\ItssRestrictions]
"UrlAllowList"="\\\\<network_path_root>;\\\\<network_path_root>\*;\\ies-inc.local;http://www.*;http://*;https://www.*;https://*;"
Comme note supplémentaire, bizarrement, la clé "UrlAllowList" était nécessaire pour que cela fonctionne sur un autre PC, mais pas sur celui de test. Ce n'est probablement pas nécessaire du tout, mais lorsque je l'ai ajouté, le problème a été résolu. L'utilisateur peut ne pas avoir fermé le fichier d'origine ou quelque chose comme ça. Alors juste une considération. Je suggère d'essayer le moins et de le tester, puis d'ajouter si nécessaire. Une fois que vous confirmez, vous pouvez déployer si nécessaire. Bonne chance!
Edit: P.S. Une autre méthode qui a fonctionné a été de mapper le chemin d'accès au réseau localement à l'aide de mklink/d (liaison symbolique sous Windows 7 ou version ultérieure), mais de mapper une lettre de lecteur réseau (Z: à tester) ne fonctionnait pas. Juste matière à réflexion et je n'ai pas eu à "débloquer" aucun fichier. De plus, la solution acceptée n'a pas résolu le problème pour moi.