COMサーバーをWiXに登録する
-
03-07-2019 - |
質問
WiXを使用してWindowsインストーラーパッケージを作成し、苦労しているCOMサーバーを登録するためのベストケースソリューションを決定しようとしています。
この投稿では Deployment Engineering Archive:HOWTO: WIXでRegsvr32.exeを使用します、<!> quot; Setup police <!> quot;に対するオープンリクエストがあります。 exeカスタムアクションでregsvr32を使用して取り締まる。私はユーザーではなくシステムに登録するときにregsvr32
を使用することの悪さを知っていますが、OleSelfRegister
にはマイクロソフトサポート情報から問題が発生する可能性があることを思い出します(申し訳ありませんが、リンクが見つかりません) <=>を使用することをお勧めします。
何かアドバイスはありますか
解決
Read <!> quot; SelfRegおよびTypeLibテーブルを使用しないでください<!> quot;で:
https://msdn.microsoft.com/en-us/library / bb204770#no_selfreg
WiXの場合、次の場所にあるスキーマリファレンスの Component 要素をご覧ください。
http://wixtoolset.org/documentation/manual/v3 /xsd/wix/component.html
AppId 、 Class 、 ProgId 、レジストリなどの特定の子要素に注意してください。適切な手法は、COM extraction
を使用して登録情報を反映し、インストーラーに宣言的に送信することです。これにより、MSIは、失敗する可能性のあるコード(DllRegisterServer()
など)修理と広告の観点からコンポーネントのフットプリントに関するMSIの洞察を提供します。
他のヒント
ツールがあります<!> quot; Tallow <!> quot; Wixに含まれています。これを使用して、正しいレジストリエントリを自動的に生成できます。次に、これらのエントリを書き込むようにwixインストールを構成します。 Selfregは使用しないでください。
@Trampsterが指摘したように、heat.exeはCOMサーバーからレジストリエントリを収集するのに適していません。試しましたが、結果は不完全でした。
代わりに、 レジストリアクセスの監視(InstallSiteツール:監視) 、InstallShield RegSpyUIを使用しました。これは、評価版を含むInstallshield v7以降のバージョンに同梱されていると思われます。この情報は古くなっている可能性があります。 VS2013に付属している非常に役に立たないInstallshield LEには提供されていないことを確認できます。
幸い、InstallShield 2010のコピーがありましたが、これにはRegSpyUIが付属していました。
とにかく、RegSpyUIは簡単に使用できました。COM.exeをポイントし、レジストリ情報を.regファイルに抽出します。次に、熱を使用して、これをWixプロジェクトに追加できる.wxsファイルに収集します
heat reg <some.reg> -gg -o <some.wxs>
その後、COM .exeの場所を指すハードコードされたパスを変更するだけで、目的のインストールフォルダーが反映されます。
e.g。 RegSpyUI + heatによって作成された.wxsファイルに次のようなものがある場合
<Fragment>
<DirectoryRef Id="TARGETDIR">
<Component Id="blah" Guid="{xxxxxxxxxxxxxxxxxxxxxxxxx}" KeyPath="yes">
<RegistryKey Key="TypeLib\{xxxxxxxxxxxxxxxxxxxxxx}\4.1\0\win32" Root="HKCR">
<RegistryValue Value="C:\Users\you\projects\MyProject\dependencies\installation\COMFOO.exe" Type="string" />
</RegistryKey>
</Component>
</DirectoryRef>
</Fragment>
そしてメインのwixファイルにインストールする
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="COMPANY" Name="My Company">
<!--This is the actual installation folder-->
<Directory Name="MyProduct" Id="MYPRODUCT">
次に、RegistryValue @ valueパスを... <!> quot; [MYPRODUCT]\COMFOO.exe
<!> quot;
これには1つの欠点があります。heat.exeでのWiX Com登録は、.exe COMサーバーでは機能しません。 InstallShieldとそのツールはそれをサポートしているようですが、RegSpyUIは単なるUIツールであり、ビルドマシンで実行できるツールではありません。
これを試してください:
- 新しい.NETプロジェクトを作成
- wxを収集する候補のCOM dllまたはOOP exeへのプロジェクト参照を追加します
- ファイルを検索
Interop.candidate.dll
(obj\debug
フォルダー内) - 見つけたinterop dllでWiX Heatツールを実行します。