我已经尝试完成这一看似简单的任务了整整一天。因此,如果有人可以阐明我在这里缺少什么,我将不胜感激。
我编写了一个Outlook 2007加载项(在Visual Studio 2008中为C#项目),现在我正在尝试为其编写MSI安装程序(使用WiX)。安装过程还需要安装VS Tools For Office Runtime,我将单独进行安装。
然后,以下是注册表项,我已经为当前用户对其进行了测试。使用WiX标记:
<Component Id="RegistryRegAddin" Guid="{GUID}">
<RegistryKey Id="RegKey_AddIn" Root="HKCU" Key="Software\Microsoft\Office\Outlook\Addins\$(var.ProductThis)" ForceCreateOnInstall="yes" ForceDeleteOnUninstall="yes">
<RegistryValue Type="string" Name="Description" Value="$(var.AppDescr)" />
<RegistryValue Type="string" Name="FriendlyName" Value="$(var.ProductThis)" />
<RegistryValue Type="integer" Name="LoadBehavior" Value="3" />
<RegistryValue Type="string" Name="Manifest" Value="[INSTALLFOLDER]AddInName.vsto|vstolocal" />
</RegistryKey>
</Component>
因此,这对于当前用户而言效果很好。
但是现在我试图对其进行更改,以便为所有用户安装该加载项。我在上面的WiX注册表标记中将HKCU
修改为HKLM
。但是在那种情况下,MSI可以很好地安装(在32位Windows 7 Pro上),但是我的加载项不会加载到Outlook中。
为什么!???
然后,如果我在Outlook中转到“工具”->“信任中心”->“加载项”->“我的加载项”位于“非活动应用程序加载项”中,但是当我尝试对其进行检查以使其启用时,Outlook会显示此信息讯息:
在HKEY_LOCAL_MACHINE中注册的Office加载项的连接状态 无法更改。
啊!!!!
答案 0 :(得分:0)
我认为这是Office 2007特有的。尝试在您的代码中添加以下代码片段:
<Component Id="EnableLocalMachineVSTO" Permanent="yes">
<Condition>ALLUSERS=1</Condition>
<RegistryKey Root="HKLM" Key="Software\Microsoft\Office\12.0\Common\General">
<RegistryValue Name="EnableLocalMachineVSTO" Value="1" Type="integer" KeyPath="yes" />
</RegistryKey>
</Component>
EnableLocalMachineVSTO
是您可以在搜索框中输入以了解更多信息的关键字。这是AFAIK的“我的加载项在以当前用户身份安装时有效,而在以本地计算机安装时却不起作用”的常见问题之一。
答案 1 :(得分:0)
但是在那种情况下,MSI可以很好地安装(在32位Windows 7 Pro上),但是我的加载项不会加载到Outlook中。
有多种原因可能导致您的加载项无法加载。其中您可以找到以下几点以及可能的诊断方法:
Startup
事件处理程序正在执行。
当VSTO加载项产生不会导致应用程序意外关闭的错误时,可能会发生软禁用。例如,如果在启动事件处理程序执行期间引发未处理的异常,则应用程序可能会软禁用VSTO加载项。
当您重新启用软禁用的VSTO加载项时,应用程序将立即尝试加载VSTO加载项。如果尚未解决最初导致应用程序软禁用VSTO加载项的问题,则应用程序将再次软禁用VSTO加载项。Fuslogvw.exe
实用程序检查是否已加载正确的程序集。有关更多信息,请参见Assembly Binding Log Viewer。您可能还会在VSTO AllUser addIn fails to load on several clients页上找到类似的情况。