11

我已经为 2003、2007 和 2010 创建了一个 Outlook 加载项。该加载项在 2007 年和 2010 年工作正常,但在 2003 年在除我自己的开发机器之外的任何机器上都无法正确加载。没有代码问题,因为加载行为中没有显示错误,并且它不是禁用的项目。该加载项也不显示在 COM 加载项列表中。此加载项以前在 2003 年以下工作。

这是奇怪的部分。我有一个较早时间点的加载项副本,因此不包含完整版本的某些功能。此加载项在 2003 年正确加载。因此,作为测试的一部分,在 VM 上,我安装了早期版本(我称之为test)和当前版本不起作用(我称之为full) . 在 HKCU > Software > Classes > CLSID > [[guid]] > InprocServer32 下的注册表中,对于测试版本,我将“Manifest Location”和“Manifest Name”键更改为完整版本的值。然后我运行 Outlook,完整版运行完美。

我看不出完整的加载项在它自己的注册表设置下是如何工作的,但在test下工作正常,并且只能在 Outlook 2003 上工作。

以下是基本信息:

我的开发设置是:

  • Windows 7 64 位
  • 已安装 Outlook 2003
  • 为加载项项目运行 VS2008,但也为附属程序集使用 VS2010。
  • Set Security 项目包括在内并进行了修改,以允许多个程序集设置 CASPol。

安装项目中包含以下先决条件:

  • .Net 2.0
  • .Net 3.5SP1
  • Office 2003 PIA(也分别是 2007 和 2010 年的 2007 年和 2010 年的 PIA)
  • VSTOSE 运行时
  • 视窗安装程序 3.1

任何提示将不胜感激,因为我在这个问题上花了将近 4 天!

TIA。


更新1:

根据@JoaoAngelo 的评论,我检查了注册表设置,它们如下:

HKCU > 软件 > 类 > CLSID > {add-in CLSID} > InprocServer32

 - (default) - '%CommonProgramFiles%\Microsoft Shared\VSTO\8.0\AddinLoader.dll'
 - ManifestLocation - path to the containing folder
 - ManifestName - the .dll.manifest file name
 - ThreadingModel - 'Both'

HKCU > Software > Microsoft > Office > Outlook > Addins > MyAddin

 - (default) - not set
 - CommandLineSafe - '1'
 - Description - a string
 - FriendlyName - add-in ID
 - LoadBehavior - '3' (this never gets set to 2, which would indicate an issue)
 - Manifest - path to the .dll.manifest of the add-in assembly
 - Path - path to the containing folder

根据部署页面,我还在后者下添加了以下内容,但无济于事:

 - ManifestLocation 
 - ManifestName

更新 2:

根据 0xA3 评论;在 HKCR > MyAddin 下,我有一个带有单个字符串值的 CLSID 键:

(default) - {add-in CLSID}

CLSID 与 HKCU > Software > Classes > CLSID 和整个注册表中看到的相同。

4

4 回答 4

3

我终于设法找到了问题,它与注册表有关。

我最初计划为每个版本的 Outlook 使用单独的加载项,因此我的命名空间和命名约定等是:

  • [公司].AddIns.Outlook2003
  • [公司].AddIns.Outlook2007
  • [公司].AddIns.Outlook2010

但是,我设法创建了针对所有 3 个的加载项,因此我将 [Company].AddIns.Outlook2003 重命名为 [Company].AddIns.Client。

I'd changed the registry settings for HKCU > Software > Microsoft > Office > Outlook > Addins > MyAddin, to reference the change described, but for some reason I didn't update it under HKCU > Software > Classes.

As soon as I changed the latter settings in VS, it worked!

For reference the changes were made in VS under the Setup Project, under View > Registry.

A bit annoying that this issue didn't appear under 2007/2010, as it may have been easier to track down.

于 2011-04-06T12:30:57.253 回答
0

如果您还没有这样做,您应该设置以下环境变量来帮助您解决插件加载问题:

  • VSTO_LOGALERTS=1
  • VSTO_SUPPRESSDISPLAYALERTS=0

第一个将导致在包含插件程序集的目录中创建一个 *.log 文件,第二个将允许在您启动目标应用程序时显示错误弹出窗口,在本例中为 Outlook。

您还说,在您的带有 Office 2003 的开发盒中,插件可以正常工作。由于 Visual Studio 会在您执行构建时自动在开发框中注册插件,因此您应该确保在设置中创建了所有必要的注册表项。您可以检查以下 MSDN 文章中的必需注册表项部分,以验证您是否在安装程序中创建了正确的密钥:

部署应用程序级插件

于 2011-03-23T11:43:45.460 回答
0

我建议按照此处描述的故障排除步骤进行操作:

Hamed Ahmadi:我的 Office 插件无法加载!

于 2011-03-23T12:01:23.567 回答
0

您确定由于某种原因该插件没有被 Outlook 禁用吗?如果您已在机器级别(而不是用户级别)安装它,无论如何它都不会出现在 Com 插件列表中。也许尝试将其安装为每个用户添加(因此它确实显示在列表中)并从那里开始?

于 2011-03-23T16:09:57.873 回答