2012-09-17 47 views
8

WiXを使用してDLLを登録しようとしています。今、私が知っていると私は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: 193WiXを使用してDLLを登録できません

私は周りを見回したとビットを説明し、この記事を見つけましたregistering DLLsについてもっと詳しく説明しますが、可能であれば自己登録ルートを避けたいと思います。また、手動で下にDLLを手動で登録する方法も記載されていますが、レジストリやCOMオブジェクトに精通していないので、CLSID、ProgIdなどの情報がどこにあるのか分かりません。

誰かが正しい方向に私を指すことができますか私はheatを介してDLLを実行する必要があることを私に説明していただければ幸いです。

答えて

1

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

+0

これは、ATL 6.0を使用して作成されたDLLです。私がregserv32を呼び出すと、すべてが正常にロードされ、システムはそれを認識しますが、これまでは常にSelfRegとしてロードされていました。 – Seb

+0

この種の問題は解決するのが本当に難しいです。 DLLを共有できれば、私はあなたのためにそれを抽出しようとすることができます。また、クリーンなマシンでレジストリスナップショットツールを使用してregsvr32を取得し、wxsに手動で作成することもできます。または、InstallShieldの評価を使用してCOMおよびWiXの暗色を抽出し、逆コンパイルしてwxsに戻します。トリックがたくさんありますが、経験が必要です。 –

+0

会社の財産であるため、実際にDLLを共有することはできませんが、私はRegSpyを使用しようとしており、約8時間凍っています。データを取り出そうとしているだけだと思っています。 – Seb

0

Wixのheat.exeで同じ問題が発生しました:警告HEAT5150:SelfReg DLLと思われるファイルからデータを収集できませんでした。理由は、dllが読み込む依存関係を見つけることができませんでした。私はあなたにも同様の問題があるはずだと思います。 Process Monitorツールを実行し、filterを適用してheat.exeイベントを取得しました。私は問題の根本原因を見つけることができました。基本的には、すべての依存関係DLLを、メインDLLがある場所と同じ場所に配置する必要がありました。あなたのケースでは、addin.dllはあなたの依存するDLLがあるのと同じ場所を指し示す必要があります。

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

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

+1

これを設定するのにほぼ一日を過ごした後、私はまだこれでどこにもいません。ブログの投稿に示されているエラーは、ターゲットによってスローされた例外について言及しています。私の場合は、ファイルが読み込めないという例外がスローされます。私はプロセスモニタに現れたすべての依存関係も加えました。まだ私はエラーを取得します。たぶん私はちょうどこのDLLを自己登録することに固執しています。 – Seb

11

私はこれが古いと知っていますが、私はここに答えを加えたいと思っています。あなたが登録しようとしているdllが64ビットdllであり、Heat.exeが32ビットなのでdllをロードできないそのアドレス空間。とにかく、wxsファイルを作成するためのdllの32ビットバージョンを指してください。そのエラーを受け取るべきではありません。

関連する問題