10

WiX を使用して DLL を登録しようとしています。これで、レジストリ情報をプルするためにそれを使用して取得する必要があることを理解しheatましたが、heat は次のエラー メッセージで失敗するようです。heat.exe : warning HEAT5150 : Could not harvest data from a file that was expected to be a SelfReg DLL: C:\Users\seb\Desktop\Development\addin.dll. If this file does not support SelfReg you can ignore this warning. Otherwise, this error detail may be helpful to diagnose the failure: Unable to load file: C:\Users\seb\Desktop\Development\addin.dll, error: 193

私は周りを見回して、DLLの登録についてもう少し詳しく説明しているこの投稿を見つけましたが、可能であれば自己登録ルートを避けたいと思います。また、DLL を手動で登録することについても言及されていますが、レジストリや COM オブジェクトに精通していないため、CLSID、ProgId、および言及されているその他の情報をどこで取得できるかを知ることができません。

誰かが私を正しい方向に向けたり、DLLを実行するために何をする必要があるかを説明したりできれば、大heat歓迎です。

4

3 に答える 3

14

これが古いことは知っていますが、ここに回答を追加したかったのです-これが発生する理由は、登録しようとしているdllが64ビットdllであるためです-Heat.exeは32ビットであるため、アドレス空間にdllをロードできません。とにかく、32 ビット バージョンの dll を指定して wxs ファイルを作成するだけで、そのエラーは表示されません。

于 2014-12-18T19:34:18.970 に答える
1

これはアンマネージ/ネイティブDLLですか?Dependency Walkerは欠落している依存関係を表示しますか?通常、これはDllRegisterFunctionが失敗し、Heatがデータを抽出できなかったことを意味します。その問題を修正すれば、優れたXMLメタを取得できるはずです。

于 2012-09-17T19:34:27.767 に答える
0

Wix heat.exe で同じ問題が発生していました。警告 HEAT5150 : SelfReg DLL であると予想されるファイルからデータを収集できませんでした。その理由は、dll がロードする依存関係を見つけることができなかったためです。私はあなたが同様の問題を抱えているに違いないと思います。Process Monitor ツールを実行し、フィルタを適用して heat.exe イベントをキャプチャしました。問題の根本原因を見つけることができました。基本的に、すべての依存関係 dll をメインの dll と同じ場所に配置する必要がありました。あなたの場合、addin.dll は、依存する dll と同じ場所を指す必要があります。

この警告に関する次のブログは、根本的な原因を突き止めるのに大いに役立ちました。

http://marc.durdin.net/2009/12/case-of-hidden-exception.html ?

于 2012-09-18T21:14:54.170 に答える