2016年01月31日

依存関係の一つが読み込めないDLLエラーの対策と原因

謎のエラーダイアログ

新年早々に新PC(Windows10)を購入し、愛用ツールなどを新規インストールする作業も一段落したある日、ネットからダウンロードしたソフトにこのようなエラーが出るようになった。

ファイルまたはアセンブリ 'file:///xxxxxxxxxxxxxxxxxxxxxxxxx'、またはその依存関係の 1 つが読み込めませんでした。操作はサポートされません。 (HRESULT からの例外:0x80131515)

解決法

せっかちな人のために先に解決法を書いておく。

まずエラー内容に示されているその問題のDLLをエクスプローラーで表示に、右クリックからプロパティを選ぶ。

次にプロパティの一番下のセキュリティ欄に「ブロックの解除」というチェックがあるのでチェックして適用あるいはOKを押す。

これでエラーは出なくなる。なおこの問題のDLLが大量にあって手作業で直すのが大変な場合、以下のサイトの情報が役に立つかもしれない(筆者は試していない)。

複数のファイルをまとめて「ブロックの解除」をする方法 - Windows - Project Group

原因

この問題は以前のバージョンのWindowsにも存在していたようなのだが、この数年普通に使っていて特に発生した覚えがなく、新マシン導入後にぶち当たって頭を悩ませることになった。なぜいまごろになってこんなことが起きるようになったのか? というわけで調査を続行してみた。

PMDE/PMXEプラグインでのDLLブロックについて:T0R0のブロマガ - ブロマガ

「DLしたZIPファイルをエクスプローラーを使用して解凍した」時に問題が発生し、「私が使用しているExpLzhではこの制限は発生しません」とある。おかしい。私が今回ファイル展開に使用したのもExpLzhなのだが。

どうもExpLzhが怪しいので、更に調べる。

「Explzh」v7.29が公開、NTFSで“ZoneID”を維持して展開する機能が追加 - 窓の杜

去年の9月、ExplzhにZoneIDを付与する機能がつけられたらしい。なるほど、さっきのエラーはこのZoneIDとかいうのが絡んでいるのだな? だが「初期状態で無効化されている」らしいし私には関係ないはずだが…。 Explzhの設定を見てみる。

んん?ZoneIDを維持する設定が有効になっている。私はこんな設定いじった記憶がないのだが??? まさか…。

Explzh for Windows 修正履歴

v.7.29 で実装した ZoneID を維持して展開する機能については、デフォルトで 「on」となるように変更されました。(ご要望が多かったため、です。既に設定済みの環境では設定通りに動作します)

これかーーーーー!!!

これで「いまごろになって」「特に何もいじってないのに」DLLエラーに悩まされた原因がわかった。最新版を新規インストールした時点でこの罠にハマっていたのだ…。

ユーザーから要望が多かったらしいが、謎エラーにハマって発狂するユーザーはそれ以上に発生すると思われるのだが…セキュリティ意識が高いのは結構なことだが、なにも知らない善良なユーザーが犠牲になると考えるとなんというか…モヤッとする。

というわけで、今後このエラーに悩まされたくない人は、Explzhの設定から「NTFS の ZoneID を維持して展開」のチェックを外しておこう、というお話でした。

posted by ちょむ at 12:14| Comment(1) | TrackBack(0) | 日記
この記事へのコメント
エラーが出る仕組みやら詳しい情報、勉強になりました!ありがとうございます。
解凍する前にZIP状態でブロック解除しておくと、解凍結果もみんな解除済になってて楽ですね。
Posted by .exe at 2017年01月07日 15:40
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/173128609
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック