x84 ターゲット プラットフォームに関して、WiX を使用して Word アドインを展開しています (少なくとも Office のインストールは x86 である必要があり、どの OS プラットフォームが使用されているかに関係なく) すべてが正常に機能しており、Word アドインの COM Interop 登録が機能し、アドインをインストールした後、最初に単語を起動すると、アドインが自動的に開始されます。
レジストリへの次の登録作業を行っています(heat.exeの出力からカット)
次の heat コマンドを使用して、COM Interop の登録に役立つ中間ファイルを作成しました。
"C:\Program Files\Windows Installer XML v3.5\bin\heat.exe" file MyAddin.dll -ag -template fragment -out MyAddin.wxs
Interestst の出力は次のようになります: (この方法で RegistryValue を使用することは推奨されていません)
<Class Id="{10BC65F1-32C0-3ED4-98A0-17661A8C4455}" Context="InprocServer32" Description="MyAddin.MyAddinClass" ThreadingModel="both" ForeignServer="mscoree.dll">
<ProgId Id="MyAddin.MyAddinClass" Description="MyAddin.MyAddinClass" />
</Class>
<File Id="filCC4172BEC1312562EDEF49648E45AE0D" KeyPath="yes" Source="..\MyAddin\bin\Debug\MyAddin.dll" />
<RegistryValue Root="HKCR" Key="CLSID\{10BC65F1-32C0-3ED4-98A0-17661A8C4455}\Implemented Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}" Value="" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{10BC65F1-32C0-3ED4-98A0-17661A8C4455}\InprocServer32\1.0.0.0" Name="Class" Value="MyAddin.MyAddinClass" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{10BC65F1-32C0-3ED4-98A0-17661A8C4455}\InprocServer32\1.0.0.0" Name="Assembly" Value="MyAddin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{10BC65F1-32C0-3ED4-98A0-17661A8C4455}\InprocServer32\1.0.0.0" Name="RuntimeVersion" Value="v4.0.30319" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{10BC65F1-32C0-3ED4-98A0-17661A8C4455}\InprocServer32\1.0.0.0" Name="CodeBase" Value="file:///[#filCC4172BEC1312562EDEF49648E45AE0D]" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{10BC65F1-32C0-3ED4-98A0-17661A8C4455}\InprocServer32" Name="Class" Value="MyAddin.MyAddinClass" Type="string"Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{10BC65F1-32C0-3ED4-98A0-17661A8C4455}\InprocServer32" Name="Assembly" Value="MyAddin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{10BC65F1-32C0-3ED4-98A0-17661A8C4455}\InprocServer32" Name="RuntimeVersion" Value="v4.0.30319" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{10BC65F1-32C0-3ED4-98A0-17661A8C4455}\InprocServer32" Name="CodeBase" Value="file:///[#filCC4172BEC1312562EDEF49648E45AE0D]" Type="string" Action="write" />
このようなものを含むコンポーネントには、Win64Flag タグが yes に設定されています。したがって、レジストリの x64 部分に書き込まれると思いました。これまで、これを伝えるレジストリリフレクションに関する次の記事を読みました:
たとえば、32 ビットの InprocServer32 キーは 64 ビット アプリケーションには関係ないため、InprocServer32 キーは 64 ビットのレジストリ ビューに反映されません。
さらに:
ただし、64 ビット アプリケーションは 32 ビット LocalServer32 キーを使用でき、LocalServer32 キーが反映されます。
しかし、既に InprocServer32 の代わりに LocalServer32 を使用しようとしましたが、これを行うと、両方のプラットフォームでアドインを開始できません。
RegAsm ツールの呼び出しを使用する必要がありますか? それとも、x64 プラットフォーム用のタグまたは相互運用登録オプションが不足していますか? 誰でも助けることができますか?