背景をインストールし登録します。ウィックス中に.NET COM DLLが
私たちのアプリケーションは、非常に大きなアプリケーションのためのプラグインです。私たちが作成するものはすべて、より大きなアプリケーションがフックするDLLファイルです。このため、.NET(C#)では、DLLファイルをCOMインターフェイス用に登録する必要があります。
私たちは作業中のInstallShieldプロジェクトを持っていますが、ここでは取り上げない理由がたくさんありますので、WiXに移行してください。インストーラのために残されている唯一のことは、COMのDLLファイルを登録することです。ここで問題
は、単一のDLLファイルのサンプルコンポーネントです。 How do you register a Win32 COM DLL file in WiX 3?の受け入れ答えを1として
<Component Id="MyComponent" Guid="COMPONENT-GUID" SharedDllRefCount="yes" >
<File Id="MyDLL.dll" Name="MyDLL.dll" KeyPath="yes" Assembly=".net"
AssemblyManifest="MyDLL.dll" AssemblyApplication="MyDLL.dll" />
</Component>
、ファイルのタグにSelfRegCost=1
を追加することをお勧めします。これにより、インストール中にエラーが発生します。
モジュールC:¥Program files¥Product¥MyDll.dllの登録に失敗しました。 HRESULT -2147024769。サポート担当者に連絡してください。
(ロブMenshingによって)同じ質問における第二の答えは、このアプローチに対して推奨していますが、このファイルのタグ内に追加する:として配置するように私は少し混乱しています
<Class Id="PUT-CLSID-HERE" Context="InprocServer32" ThreadingModel="apartment" Description="Your server description">
<ProgId Id="Your.Server.1" Description="Your ProgId description">
<ProgId Id="Your.Server" Description="Your ProgId description" />
</ProgId>
</Class>
<Class Id="PUT-PROXY-CLSID-HERE" Context="InprocServer32" ThreadingModel="both" Description="Your server Proxies, assuming you have them">
<Interface Id="PUT-INTERFACEID-HERE" Name="IInterface1" />
<Interface Id="PUT-INTERFACEID-HERE" Name="IInterface2" />
<Interface Id="PUT-INTERFACEID-HERE" Name="IInterface3" />
<Interface Id="PUT-INTERFACEID-HERE" Name="IInterface4" />
</Class>
CLSID ids。生成されたGUIDを入れてインストールしました。それはうまくインストールされましたが、大きなアプリケーションはDLLファイルを見つけることができませんでした。 (私はheat.exe
から生成されたインターフェイスのタグを使用する。)
(アダンTegenによって)同じ問題に見られる別のアプローチは、出力を使用MYDLL.DLLアウトmy.wxs
heat.exeファイルを使用することをお勧めします、私は、ファイルのタグにこれを追加します。
<TypeLib Id="Another Guid" Language="0" MagorVersion="1">
<!--Interfaces generated from heat.exe-->
</TypeLib>
私はCOMのための.NETを登録しようとしているすべての方法が失敗したと話題についてとても多くの質問を読んだ後、私はそれを行うための正しい方法を知ることにまったく近づいていません。私は何をすべきか? WiXの他のすべてがかなりシンプルなときに、なぜこれは難しい作業ですか?
オリジナルのInstallShieldプロジェクトでは、regasm.exe
というカスタムアクションが作成されています。他のすべてが失敗した場合は可能性がありますが、私はむしろ正しいことをしたいと思います。
私はちょうどheat.exe file myDll.dll -scom -o myDll.wxs
が私に必要なものと同様のレジストリ値を出力することを発見しました。では、DLLコンポーネント内で新しく作成されたコンポーネントをどのように参照するのですか?
私のでは、単に を追加しますか?私のheat.exeコマンドは何ですか? -scomは、私がグーグルで見つけた提案からのものです。私はCOMの抑制が奇妙だと思ったが、それは私に期待したCSLIDを与えた。 heat.exeファイルmyDll.dll -o mydll.wxs? –
SaulBack
"heat.exeファイルmyDll.dll -o mydll.wxs"の出力を使用しました。ありがとう – SaulBack