L'apertura di un file CHM produce: "la navigazione alla pagina web è stata annullata"


84

Sto cercando di aprire un file .chm.

Ho scaricato il sorgente, l'ho estratto, ho fatto doppio clic su Waffle.chm"Apri" ma non importa quale elemento nel file chm clicco, ricevo il messaggio:

Navigation to the webpage was canceled.  
What you can try: 
Retype the address.  

inserisci qui la descrizione dell'immagine

Cosa sta succedendo qui?

Risposte:


168

Sommario

Gli aggiornamenti di sicurezza Microsoft 896358 e 840315 bloccano la visualizzazione del contenuto del file CHM quando vengono aperti da un'unità di rete (o un percorso UNC ). Questo è il tentativo di Windows di impedire ai vettori di attacco di virus / malware di infettare il tuo computer e ha bloccato il file .chm che traccia i dati tramite il protocollo "InfoTech", utilizzato da questo file chm.

Riepilogo del problema da parte di Microsoft: http://support.microsoft.com/kb/896054

Soluzioni

  1. Se utilizzi Windows Server 2008, Windows 7, Windows ha creato una soluzione rapida. Fare clic con il pulsante destro del mouse sul file chm e verrà visualizzata la finestra di dialogo "Proprietà yourfile.chm", in basso, viene visualizzato un pulsante chiamato "Unblock". Fare clic su Sblocca e premere OK e provare ad aprire nuovamente il file chm, funziona correttamente. Questa opzione non è disponibile per le versioni precedenti di Windows precedenti a WindowsXP (SP3).

  2. Risolvi il problema spostando il tuo file chm FUORI dall'unità di rete. Potresti non sapere che stai utilizzando un'unità di rete, ricontrolla ora: fai clic con il pulsante destro del mouse sul file .chm, fai clic su proprietà e guarda il campo "posizione". Se inizia con due backslash come questo:, \\epicserver\blah\stai utilizzando un'unità di rete. Quindi, per risolverlo, copia il file chm e incollalo in un'unità locale, come C: \ o E :. Quindi prova a riaprire il file chm, Windows non va fuori di testa.

  3. Ultima risorsa, se non è possibile copiare / spostare il file dall'unità di rete. Se devi aprirlo dove si trova e stai utilizzando una versione inferiore di Windows come XP, Vista, ME o altro, dovrai dire manualmente a Windows di non impazzire per questo file .chm. L'utility HHReg (HTML Help Registration Utility) automatizza questa attività. Fondamentalmente scarichi l'utilità HHReg, carichi il tuo file .chm, premi OK e creerà le chiavi di registro necessarie per dire a Windows di non bloccarlo. Per maggiori informazioni: http://www.winhelponline.com/blog/fix-cannot-view-chm-files-network-xp-2003-vista/

Windows 8 o 10? -> Aggiorna a Windows XP.


3
Non vedo il pulsante "Sblocca" né su WinXP SP3 né su WinVista Home Premium
GetFree

La soluzione 1 non è in Windows 8, esiste un modo semplice per win8?
countunique

2
Nessuna delle soluzioni proposte corrisponde alle 4 soluzioni possibili dato il mio articolo KB di riferimento. L'impostazione di "MaxAllowedZone" su "1" ha risolto il problema per me
astrask

UNBLOCK non aiuta, devi aprire, copiare il file su un'unità locale e aprirlo dall'unità locale (non di rete).
Erdinc Ay

1
Questo problema riguarda anche chm scaricato da Internet. Il pulsante / casella di controllo di sblocco potrebbe non essere presente subito dopo il download. Nella mia esperienza, richiede prima di aprire il chm dal file system locale, vederlo danneggiato, chiuderlo, quindi andare alle proprietà del file solo per sbloccarlo.
Frédéric

43

"sbloccare" il file risolve il problema. Immagine dello schermo:

inserisci qui la descrizione dell'immagine


Me ne sono dimenticato perché non ho usato questo trucco per molto tempo, grazie per avermelo ricordato di nuovo.
kta

@kaziTanvirAhsan felice di poterti aiutare.
colemik

Spostarsi dalla posizione di rete alla posizione locale non è sufficiente: è necessario sbloccare come in questo screenshot. Grazie @trismarck
leinad13

Questo ha funzionato! Grazie. Non l'avrei mai capito da solo.
NilsB

non sono riuscito a trovare tale opzione con win-7. invece di aprire un file / w, l'ho copiato sulla mia macchina locale e funziona.
tsenapathy

11

Win 8 x64:

spostalo in un'altra cartella o rinomina la tua cartella (nel mio caso: la mia cartella era "c #"). evitare di utilizzare il simbolo sul nome della cartella. chiamalo con la lettera.

fatto.


Anche questo funziona. Il mio file .chm era in questa cartella C: \ C # \ Samples quindi l'ho spostato in C: \ temp e boom! Funziona! Grazie per questo. :)
klaydze

Eccellente! Sono un utente di Windows 10: ho dovuto rimuovere il "#" sia dal nome del file che dal nome della cartella da un vecchio file della guida c # chm.
Marcelo Bergweiler

11

Oltre alla risposta di Eric Leschinski, e poiché questo è stackoverflow, una soluzione programmatica:

Windows utilizza fork di file nascosti per contrassegnare il contenuto come "scaricato". Il troncamento di questi sblocca il file. Il nome del flusso utilizzato per CHM è "Zone.Identifier". Si può accedere ai flussi aggiungendo: streamname all'apertura del file. (mantieni i backup la prima volta, nel caso in cui il tuo RTL rovini tutto!)

A Delphi sarebbe simile a questo:

var f : file;
begin
 writeln('unblocking ',s);
 assignfile(f,'some.chm:Zone.Identifier');
 rewrite(f,1);
 truncate(f);
 closefile(f);
end;

Mi è stato detto che su file system non forkati (come FAT32) ci sono file nascosti, ma non sono ancora arrivato fino in fondo.

Anche DeleteFile () di Ps Delphi dovrebbe riconoscere i fork.


Risposta molto interessante. Dove trovo maggiori informazioni su questa cosa del fork dei file nascosti?
ViRuSTriNiTia

MSDN. Ad esempio, sb ha fatto un'osservazione che anche deletefile funziona, e ho guardato la chiamata in questione in MSDN ed esattamente come si comporta la funzione è documentato. Il bit specifico Zone.Identifier che ho ottenuto da Internet. Funziona anche per es. EXE dled bloccati se hai impostazioni di sicurezza elevate per MSIE
Marco van de Voort

6

La soluzione definitiva è consentire al protocollo InfoTech di funzionare nella zona intranet.

Aggiungi il seguente valore al registro e il problema dovrebbe essere risolto:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\ItssRestrictions]
"MaxAllowedZone"=dword:00000001

Maggiori informazioni qui: http://support.microsoft.com/kb/896054


4

Vai all'inizio

genere regsvr32 hhctrl.ocx

Dovresti ricevere un messaggio di successo come:

"DllRegisterServer in hhctrl.ocx riuscito"

Ora prova ad aprire nuovamente il tuo file CHM.


1
Giuro ... che funziona per me ... (clic con il pulsante destro del mouse sul file, le proprietà non mostravano il pulsante "sblocca". Mentre funziona bene)
tsenapathy

3

un altro modo è utilizzare software di terze parti diversi. Questo collegamento mostra altri software di terze parti per visualizzare i file chm ...

Ho provato con SumatraPDF e funziona bene.


2

Ho risolto questo problema a livello di programmazione nel mio software, utilizzando C ++ Builder.

Prima di assegnare il file della guida CHM Application->HelpFile = HelpFileName, controllo per vedere se contiene il flusso "Zone.Identifier" e, quando lo fa, lo rimuovo semplicemente.

String ZIStream(HelpFileName + ":Zone.Identifier") ;

if (FileExists(ZIStream))
    { DeleteFile(ZIStream) ; }

1

Apparentemente esistono diversi livelli di autenticazione. La maggior parte degli articoli che ho letto ti dice di impostare MaxAllowedZone su "1", il che significa che la zona della macchina locale e la zona intranet sono consentite, ma "4" consente l'accesso a "tutte" le zone.

Per maggiori informazioni, leggi questo articolo: https://support.microsoft.com/en-us/kb/892675

Ecco come appare il mio registro (non ero sicuro che avrebbe funzionato con i caratteri jolly ma sembra funzionare per me):

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://*;"

Come nota aggiuntiva, stranamente è stata richiesta la chiave "UrlAllowList" per far funzionare questo lavoro su un altro PC ma non su quello di prova. Probabilmente non è affatto richiesto, ma quando l'ho aggiunto, ha risolto il problema. L'utente potrebbe non aver chiuso il file originale o qualcosa del genere. Quindi solo una considerazione. Suggerisco di provare il minimo e testarlo, quindi aggiungere se necessario. Dopo aver confermato, puoi eseguire il deployment se necessario. In bocca al lupo!

Modifica: PS Un altro metodo che ha funzionato è stato la mappatura del percorso alla rete localmente utilizzando mklink / d (collegamento simbolico in Windows 7 o versioni successive) ma la mappatura di una lettera di unità di rete (Z: per test) non ha funzionato. Solo spunti di riflessione e non ho dovuto "sbloccare" alcun file. Anche la "Soluzione" accettata non ha risolto il problema per me.


Nessun problema, sono contento che qualcuno ne abbia beneficiato. Migliore!
jacktrader
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.