質問

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ツールであり、ビルドマシンで実行できるツールではありません。

これを試してください:

  1. 新しい.NETプロジェクトを作成
  2. wxを収集する候補のCOM dllまたはOOP exeへのプロジェクト参照を追加します
  3. ファイルを検索Interop.candidate.dllobj\debugフォルダー内)
  4. 見つけたinterop dllでWiX Heatツールを実行します。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top