【问题标题】:Can a .NET Word 2003 add-in be installed outside of the GAC?.NET Word 2003 加载项可以安装在 GAC 之外吗?
【发布时间】:2010-10-07 21:59:17
【问题描述】:

我创建了一个 Word 插件组件,以及一个用于安装该组件的 Visual Studio 安装项目。

在安装了 Office 2003 的干净机器上,似乎无法在 Word 中加载加载项组件。

谷歌搜索该问题表明这是因为程序集不受信任。我使用命令行工具完全信任程序集:

caspol -af AssemblyName.dll

这没有什么区别,组件仍然没有加载到 Word 中。 caspol 打印出一条消息 “因为所有 GAC 程序集总是获得完全信任,所以完全信任列表是没有的 更有意义。您应该安装任何用于安全的程序集 GAC 中的政策,以确保他们受到信任”

将安装程序更改为将程序集放入 GAC 可以使其在 Word 中正确加载。但是该组件将来可能必须使用公共程序集,在我们的其他 .NET 应用程序之间共享,并且将这些库添加到 GAC 是不可取的。

有谁知道如何设置安全性以允许在 GAC 外部安装组件时加载?

【问题讨论】:

    标签: .net ms-word gac


    【解决方案1】:

    我不认为将加载项程序集放入 GAC 是强制性的。我认为您只是缺少部署中的一步。

    Office 应用程序(例如 MS Word)通过读取某些注册表项来加载它们的加载项。您很可能不会在部署期间创建这些条目。

    要了解所有这些注册业务的详细信息,请参阅this 文章。另请阅读有关部署 Office 插件的一般信息,请参阅 this 文章

    【讨论】:

    • 谢谢 - 好建议。我已经仔细检查了所有注册表设置,它们看起来正确
    【解决方案2】:

    您绝对不必将您的程序集安装到 GAC,也没有必要在您的加载项程序集上定义任何安全策略。

    您是否将 .NET 2.0 与 Office 2003 一起使用? Office 2003 和 Office XP 在加载 .NET 2.0 插件时都存在问题。它们使用 .NET 1.1 Framework 加载(如果机器上存在,这很可能)。因此,您需要使用 Shared Add-in Support Update for the Microsoft .NET Framework 2.0 (KB908002) 修补您的 Office 安装。

    您绝对应该将此补丁添加到安装程序的先决条件中。

    answer to this questions 中查找更多详细信息。

    当然,您必须在目标系统上安装正确版本的 PIA(差点忘了这一点,错误或缺少 PIA 是加载项无法加载的主要问题之一)。

    更新:KB908002 需要在 PC 上安装 VS 2005 才能将共享插件支持更新添加到安装项目的先决条件对话框中。在这种情况下,必须使用以下解决方法:

    如果您使用的是 Visual Studio 2008,那么您必须按照下面提到的workaround 来获取在添加先决条件对话框下列出的 KB908002:

    1. 在安装了 Visual Studio 2005 的计算机上下载并安装此修复程序。
    2. 导航到C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages,找到 KB908002 文件夹。
    3. 登录到安装了 Visual Studio 2008 的机器并将 KB908002 文件夹复制到 C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages
    4. 现在,如果您转到 Visual Studio 2008 计算机上的先决条件列表,您会看到列出的修复程序。

    您根本不需要 VS 2005 的另一种选择是:

    1. 将修复下载到临时文件夹。
    2. 打开命令提示符,导航到修复程序所在的文件夹并启动以下命令以从自解压安装文件中提取文件:

      vs2005-kb908002-enu-x86.exe /C /T:C:\KB908002\
      cd \KB908002
      

      现在文件夹 C:\KB908002 将包含三个文件,vs2005-kb908002-enu-x86.exe /C /T:C:\tmp\KB908002\tmp、setup.exe 和 bootstrapper.msi

    3. 我们对bootstapper.msi的内容感兴趣,所以我们提取了这个文件的内容:

      msiexec /a bootstrapper.msi /qb TARGETDIR=C:\KB908002\tmp\
      cd tmp
      
    4. 最后,我们将解压出来的packages文件夹复制到Windows SDK的bootstrapper文件夹中

      xcopy /E "C:\KB908002\tmp\SDK\BootStrapper\Packages" "C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages"
      
    5. 现在,如果您转到 Visual Studio 2008 中的先决条件列表,您会看到列出的修复程序。

    【讨论】:

    • 感谢您的反馈。我们正在使用 Visual Studio 2008 构建插件并针对 .NET 2.0 平台,因此 KB 补丁不适用于我们的案例。我们已经安装了正确的 PIA,并且在 GAC 中它确实可以正确加载 - 所以我认为所有必需的组件都在那里
    • John,KB908002 补丁不依赖于 Visual Studio 版本。 Office XP / 2003 需要它才能加载 .NET 2.0 程序集。这意味着该补丁适用于您的情况。你试过了吗?
    • (续)可能是我发的不够清楚,但是这个补丁必须安装在安装了Office+插件的目标机器上。
    • 我尝试运行 KB908002 补丁,但出现错误消息:“未找到 Microsoft Visual Studio 2005”,这就是我认为它没有应用的原因
    • 抱歉,John,我不知道安装程序会检查是否存在 VS 2005。我将更新我的答案。
    【解决方案3】:

    您可以手动运行以下命令来设置安全性以允许 word 从 GAC 外部运行程序集。这将创建一个具有完全信任的新组,从而允许程序集运行。

    caspol.exe -u -addgroup All_Code -url "\*"  FullTrust -n AssemblyName.dll
    

    Microsoft 在以下站点 link to MSDN 上有一个安装程序自定义操作示例,它允许您将此命令作为安装程序自定义操作包含在内。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-12
      • 2010-11-11
      • 1970-01-01
      • 2011-04-12
      • 2016-08-19
      • 1970-01-01
      相关资源
      最近更新 更多