.chmファイルを開こうとしています。
ソースをダウンロードして展開し、Waffle.chm
をダブルクリックして[開く]をクリックしましたが、chmファイルのどの要素をクリックしても、メッセージが表示されます。
Navigation to the webpage was canceled.
What you can try:
Retype the address.
何が起きてる?
概要
マイクロソフトセキュリティアップデート896358および840315は、ネットワークドライブ(または NCパス )から開かれた場合、CHMファイルの内容の表示をブロックします。これは、ウイルス/マルウェアの攻撃ベクトルがコンピューターに感染するのを阻止するWindowsの試みであり、このchmファイルが使用する「InfoTech」プロトコルを介してデータを引き出す.chmファイルをブロックしました。
Microsoftの問題の要約: http://support.Microsoft.com/kb/896054
ソリューション
Windows Server 2008、Windows 7を使用している場合、windowsはクイックフィックスを作成しました。 chmファイルを右クリックすると、「yourfile.chmのプロパティ」ダイアログボックスが表示され、下部に「ブロック解除」というボタンが表示されます。 [ブロック解除]をクリックし、[OK]を押します。chmファイルを再度開きます。正常に動作します。このオプションは、WindowsXP(SP3)より前の以前のバージョンのWindowsでは使用できません。
ネットワークドライブからchmファイルを移動して問題を解決します。ネットワークドライブを使用していることに気付いていない可能性があります。今すぐダブルチェックします。chmファイルを右クリックし、プロパティをクリックして、「場所」フィールドを確認します。 \\epicserver\blah\
のような2つのバックスラッシュで始まる場合は、ネットワークドライブを使用しています。 それを修正するには、chmファイルをコピーし、C:\やE:などのローカルドライブに貼り付けます。その後、chmを再度開きますファイル、windowsはフリークアウトしません。
最後の手段として、ネットワークドライブからファイルをコピー/移動できない場合。座っている場所で開く必要があり、XP、Vista、MEなどのより小さなバージョンのウィンドウを使用している場合、Windowsにこれを気にしないように手動で指示する必要があります。 chmファイル。 HHReg(HTMLヘルプ登録ユーティリティ) ユーティリティはこのタスクを自動化します。基本的に、HHRegユーティリティをダウンロードし、.chmファイルをロードし、[OK]を押すと、必要なものが作成されます。 Windowsにブロックしないように指示するレジストリキー。詳細情報: http://www.winhelponline.com/blog/fix-cannot-view-chm-files-network-xp-2003-Vista/
Windows 8または10? -> Windows XPにアップグレードします。
ファイルを「ブロック解除」すると、問題が修正されます。スクリーンショット:
Win 8 x64:
別のフォルダに移動するか、フォルダの名前を変更してください(私の場合、私のフォルダは "c#"でした)。フォルダー名に記号を使用しないでください。文字で名前を付けます。
できた。
Eric Leschinskiの答えに加えて、これはスタックオーバーフローであるため、プログラムによるソリューションです。
Windowsは、隠しファイルフォークを使用して、コンテンツを「ダウンロード済み」としてマークします。これらを切り捨てると、ファイルのブロックが解除されます。 CHMに使用されるストリームの名前は「Zone.Identifier」です。ファイルを開くときに:streamnameを追加すると、ストリームにアクセスできます。 (RTLが混乱した場合に備えて、最初にバックアップを保持してください!)
Delphiでは、次のようになります。
var f : file;
begin
writeln('unblocking ',s);
assignfile(f,'some.chm:Zone.Identifier');
rewrite(f,1);
truncate(f);
closefile(f);
end;
フォークされていないファイルシステム(FAT32など)には隠しファイルがあると言われていますが、まだその最下部に到達していません。
追伸DelphiのDeleteFile()もフォークを認識する必要があります。
決定的な解決策は、InfoTechプロトコルをイントラネットゾーンで機能させることです。
次の値をレジストリに追加すると、問題が解決するはずです。
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1.x\ItssRestrictions]
"MaxAllowedZone"=dword:00000001
スタートへ
タイプregsvr32 hhctrl.ocx
次のような成功メッセージが表示されます。
「hhctrl.ocxのDllRegisterServerは成功しました」
ここで、CHMファイルをもう一度開いてみてください。
他の方法は、異なるサードパーティのソフトウェアを使用することです。 このリンク は、chmファイルを表示するためのサードパーティソフトウェアをさらに表示します...
SumatraPDFで試してみたところ、うまくいきました。
C++ Builderを使用して、これをソフトウェアでプログラムで修正しました。
CHMヘルプファイルApplication->HelpFile = HelpFileName
を割り当てる前に、「Zone.Identifier」ストリームが含まれているかどうかを確認し、含まれている場合は単純に削除します。
String ZIStream(HelpFileName + ":Zone.Identifier") ;
if (FileExists(ZIStream))
{ DeleteFile(ZIStream) ; }
認証には明らかに異なるレベルがあります。私が読んだほとんどの記事では、MaxAllowedZoneを「1」に設定するように指示されています。つまり、ローカルマシンゾーンとイントラネットゾーンは許可されますが、「4」は「すべて」ゾーンへのアクセスを許可します。
詳細については、この記事をお読みください: https://support.Microsoft.com/en-us/kb/892675
これは私のレジストリがどのように見えるかです(ワイルドカードで動作するかどうかはわかりませんでしたが、私には動作するようです):
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://*;"
追加の注意として、奇妙なことに、このテストを別のPCで機能させるには「UrlAllowList」キーが必要でしたが、私のテストでは必要ありませんでした。おそらくまったく必要ありませんが、追加すると問題は解決しました。ユーザーが元のファイルなどを閉じていない可能性があります。考慮事項です。最小限のことを試してテストし、必要に応じて追加することをお勧めします。確認したら、必要に応じて展開できます。幸運を!
編集:P.S.動作する別の方法は、mklink/d(Windows 7以降のシンボリックリンク)を使用してネットワークへのパスをローカルにマッピングすることでしたが、ネットワークドライブ文字(Z:テスト用)のマッピングは機能しませんでした。思考の糧であり、ファイルを「ブロック解除」する必要はありませんでした。また、受け入れられた「解決策」は私にとって問題を解決しませんでした。