Visual Studio, .NET, Support Engineering, MSDN, CodeFx

程序怪人的工作间

MSDN技术支持工程师
随笔 - 28, 评论 - 46, 引用 - 2

导航

标签

每月存档

最新留言

  • re:CodeFx 4月11日更新
    <p>最向往的薪资待遇</p> <p>只要您会上网 每日在家工作2~3小时</p> <p>没有技术的限制、没有囤货的问题,任何有兴趣者均可...
    by jackielongteng(注册) on 2009/6/14 13:34:27
  • re: VSTO 先瘦身再发布:客户端配置文件
    re: dotAge 请确定在工程发布属性的预安装选项里面选择了“.NET Framework Client Profile”,并且没有选择“.NET Framework 3.5 SP1”,后者...
    by vsto(匿名) on 2008/10/31 14:01:38
  • re: vsto
    虽然我选择的是CDROM安装,但其实并不是说要刻个CD给用户,而是要做成一个本地的完全独立安装包。从客户体验角度讲,启动了一个setup以后,再让他等半天的感觉很不好。并且,即使下载时间相同,他们也宁...
    by dotAge(匿名) on 2008/10/27 17:58:35
  • re: VSTO 先瘦身再发布:客户端配置文件
    yanshuai: 你列出的那个 255.6MB 的安装包是用来给管理员在企业内部环境配置 .NET Client Profile 再分发用的,里面应该包含了适用于各种版本 Windows (XP /...
    by vsto(匿名) on 2008/10/24 11:48:51
  • re: VSTO 先瘦身再发布:客户端配置文件
    dotAge: 如果是在企业内部通过 UNC 发布,如果没有很苛刻的网络速率或者流量限制,其实完全可以考虑使用完整版本的 .NET Framework。因为很有可能其它的基于 .NET 的应用程序还是...
    by vsto(匿名) on 2008/10/24 11:44:07
  • re: VSTO 先瘦身再发布:客户端配置文件
    4color: 相比用 C++ 开发的 Office 加载项工程,26.5M 的客户端配置依然显得比较大。但是从 .NET 提供的功能、开发效率、调式难度等多方面综合考量,这样的配置有时候已经可以让我...
    by vsto(匿名) on 2008/10/24 10:54:39
  • re: VSTO 先瘦身再发布:客户端配置文件
    20多M另外的下载,还是很多的!!
    by 4color(匿名) on 2008/10/23 16:09:18
  • 仅适用于WebSite publish方式?
    如果我选择从UNC/CDROM位置发布,好像仍然是一个巨大的Framework分发包。
    by dotAge(匿名) on 2008/10/23 10:22:11
  • re: VSTO 先瘦身再发布:客户端配置文件
    The install location for prerequisites has not been set to 'component vendor's web site' and the fil...
    by yanshuai(匿名) on 2008/10/22 12:24:07
  • re: Visual Studio 2008 SP1 Beta 可以下载啦!
    已经更新,包含了正式下载页面的信息。
    by vsto(匿名) on 2008/5/13 10:48:50
  • re: Visual Studio 2008 SP1 Beta 可以下载啦!
    能否提供下载页面,而不仅仅是exe文件链接?毕竟主要想先看Release Note以评估改进之处
    by Ninputer(匿名) on 2008/5/12 7:53:42
  • re: 怎样捕捉 Outlook 对象的“保存”事件?
    不错!!
    by intermapper(匿名) on 2008/3/5 13:55:59
  • re: 谁想要 Xbox 360?
    诶~~不错,不错 可惜,自己英文不好啊~另外也不到怎么发现BUG
    by Gyc(匿名) on 2008/3/2 13:51:58
  • re: 谁想要 Xbox 360?
    HOHO~不错,去看看!
    by intermapper(匿名) on 2008/2/29 16:55:17
  • 回复: VSTO Power Tools 发布!
    搞office应用开发的人,有福了,这么多工具
    by xjb(匿名) on 2008/2/22 15:43:00

广告

 

  之前提到了 VSTO 2005 SE (以下简称 Cypress) 开发的 Office 插件可能无法被装载,微软已经提供了修正此问题的更新程序。现在我们来探究一下引发此问题的根本原因——谁动了我的插件?

  先了解一下 Cypress 针对 Office 2003 插件的基本装载原理。用 Cypress 开发的 Office 插件并不是直接被 Office 应用程序加载的,编译得到的 .NET 程序集没有被注册为 COM 组件,而是由一个 Cypress 提供的“Loader”加载。向 Office 应用程序注册插件信息的时候,COM 注册信息中“InprocServer32”实际上指向 Cypress Add-in Loader,并且提供一个清单文件(Manifest)告诉 Loader 真正应该加载的 .NET 程序集信息。这样做的好处有很多:各个 VSTO 开发的插件不会互相干扰(Loader 会为它们创建各自的应用程序域);Loader 还可以帮助检查插件的新版本、提供插件自动升级功能;还可以对插件程序集的安全权限进行控制等等。

  至于 COM 注册信息,我们知道在 Windows 中有三个地方可以存放(不考虑 Wow64 的情况):
  HKEY_CURRENT_USER\Software\Classes
  HKEY_LOCAL_MACHINE\Software\Classes
  HKEY_CLASS_ROOT (上面两个的合并版本)

  在 Cypress 的 RTM 版本中,插件的 COM 注册信息被写入 HKEY_CURRENT_USER\Software\Classes。因为这样做可以保证开发人员不需要管理员权限就可以调试、部署。这种方法在 Windows 2000 / XP / 2003 的平台上没有任何问题。而在 Windows Vista 中,新的安全特性“Mandatory Integrity Control ”使包括 Office 2003 在内的 COM 应用程序行为发生了变化。如果应用程序是以“中等”或者更低的 Integrity Level 运行,COM 信息会从 HKEY_CLASS_ROOT 读取,包含了 Cypress 写入 HKEY_CURRENT_USER\Software\Classes 中的信息;但是如果应用程序以高于“中等”的 Integrity Level 运行(即“以管理员身份运行”),或者 UAC 关闭,COM 信息只从 HKEY_LOCAL_MACHINE 中读取。在这种情况下,Office 2003 无法找到 Cypress 插件写入的信息,所以就导致插件装载失败!

  如果开发者在 Windows Vista 中“以管理员身份”启动 Visual Studio 2005,就会因为上述的原因无法在 IDE 中调试插件。因为此时的 Visual Studio 2005 进入调试模式启动的 Office 2003 程序默认也是“以管理员身份”运行的。

  为了修正这个问题,Cypress 的修正程序将改变插件信息的写入行为:先尝试写入 HKLM,如果因为没有权限而失败,再写入 HKCU。这样,即便 Visual Studio 和 Office 2003 被提升为“管理员身份”运行,也能够保证插件的 COM 信息被找到。

  值得开发人员注意的是,这次发布的 Cypress 修正程序并没有对插件工程配套的安装程序工程作任何修改(见图)。我们必须要自己在 HKLM 中添加和 HKCU 中同样的信息,才能保证插件安装在 Windows Vista 的机器上也可以完全正常工作。

  最后顺带提一下,Office 2007 “天生”就认识 VSTO 开发的插件,所以就没有 Office 2003 那样的麻烦事儿了。

打印 | 张贴于 2007-08-30 00:26:00 | Tag:VSTO 资源  原创

留言反馈

暂时没有留言纪录
博客主人设置本博客不允许匿名用户发表言论,请登录后再试

Powered by: Joycode.MVC引擎 0.5.1.8