2012-05-25 24 views
3

我部署一个Word添加使用WiX的,关于X84的目标平台(至少在Office安装必须是x86,从来不使用哪个操作系统平台)的一切运作良好,我的Word互操作注册的Word Add In工作和添加自动启动的第一次我开始一个字我又安装了Add In。64 Word 2010中添加在注册使用WiX的

我做登记的东西以下注册表(切从heat.exe的输出)

我创建了一个中间文件,使用此命令的热量帮助我走出了COM互操作注册:

"C:\Program Files\Windows Installer XML v3.5\bin\heat.exe" file MyAddin.dll -ag -template fragment -out MyAddin.wxs 

interesst的输出是这样的:(我知道使用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部分。直到此,我读下面的文章约registry reflection讲述这件事:

例如,32位InprocServer32项是不相关的64位应用程序,所以InprocServer32项不会反映到64位注册表视图。

此外:

然而,64位应用程序可以使用的32位LocalServer32项和LocalServer32项被反射。

但我已经尝试使用LocalServer32而不是InprocServer32,但是这样做,不会让我在两个平台上都添加启动。

我将不得不使用调用RegAsm Tool或者我丢失了x64平台的一个部分标签或互操作注册选项?任何人都可以帮忙吗?

回答

0

随着威克斯你需要做两件事情以禁用注册表反射:

  1. 标记您的组件为64位组件(属性Win64中=“是”)(像你一样)
  2. 建立你的包中64位软件包(平台= x64)

此软件包在x86系统上不可用。所以你需要两个包,一个用于x86,一个用于x64。对于这两个软件包,您可以使用相同的源文件,因为x86软件包会忽略Win64属性。