惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cyberwarzone
Cyberwarzone
V
Vulnerabilities – Threatpost
T
Tenable Blog
Forbes - Security
Forbes - Security
Simon Willison's Weblog
Simon Willison's Weblog
AWS News Blog
AWS News Blog
G
GRAHAM CLULEY
Know Your Adversary
Know Your Adversary
S
Securelist
C
Cybersecurity and Infrastructure Security Agency CISA
Project Zero
Project Zero
C
CXSECURITY Database RSS Feed - CXSecurity.com
V
Visual Studio Blog
WordPress大学
WordPress大学
Latest news
Latest news
K
Kaspersky official blog
T
Tailwind CSS Blog
T
Threat Research - Cisco Blogs
B
Blog RSS Feed
C
Cisco Blogs
博客园 - 聂微东
Martin Fowler
Martin Fowler
T
The Blog of Author Tim Ferriss
小众软件
小众软件
L
LangChain Blog
阮一峰的网络日志
阮一峰的网络日志
L
LINUX DO - 热门话题
Stack Overflow Blog
Stack Overflow Blog
罗磊的独立博客
P
Proofpoint News Feed
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
P
Privacy International News Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
C
CERT Recently Published Vulnerability Notes
Cisco Talos Blog
Cisco Talos Blog
S
SegmentFault 最新的问题
Security Latest
Security Latest
Y
Y Combinator Blog
爱范儿
爱范儿
aimingoo的专栏
aimingoo的专栏
P
Privacy & Cybersecurity Law Blog
L
LINUX DO - 最新话题
月光博客
月光博客
The GitHub Blog
The GitHub Blog
博客园 - 三生石上(FineUI控件)
S
Security Affairs
P
Proofpoint News Feed
D
DataBreaches.Net
有赞技术团队
有赞技术团队
云风的 BLOG
云风的 BLOG

博客园 - Cameo

解决VSTO项目重定向到.NET Framework 4的编译和运行时错误 Excel 应用程序如何创建数据透视表 值类型与引用类型 C#类型转换 VSTO开发团队成立 15. Command 命令(行为型模式) 14. Template Method模板方法(行为型模式) 13. Proxy代理(结构型模式) 12. Flyweight享元(结构型模式) 11. Facade外观[门面模式](结构型模式) 10. Decorator 装饰(结构型模式) 9. Composite 组合(结构型模式) 8. Bridge 桥接(结构型模式) 7. Adapter 适配器(结构型模式) 6. Prototype 原型(创建型模式) 5. Factory Method 工厂方法(创建型模式的基础) 4.Builder 建造者(生成器)(创建型模式) 书籍收藏 3. Abstract Factory 抽象工厂(创建型模式)
Visual studio tools for office体系结构
Cameo · 2008-10-21 · via 博客园 - Cameo

使用 Visual Studio Tools for Office 可以创建两种类型的解决方案:文档级自定义项和应用程序级外接程序。它们具有以下配置:

  • 文档级自定义项由附加于 Microsoft Office Word 文档或 Microsoft Office Excel 工作簿的托管代码程序集组成。

  • 应用程序级外接程序由作为 Microsoft Office 应用程序中的外接程序运行的托管代码程序集组成。

 使用Visual Studio Tools for Office 开发的应用程序是基于CLR的托管应用程序,而Office 是基于COM 组件的非托管应用程序.所以在此觉得有必要复习一下托管应用程序在CLR中的执行过程.就举一个最简单的例子吧,代码如下:

Code

下图为执行的流程图

     简单说说执行过程,VS.NET IDE 调用CSC.exe编译器生成EXE程序集.以32位操作系统为例.当执行EXE程序集时,首行创建一个32位的进程,这个进程中的主线程会去调用MSCorEE.dll组件来初始化CLR,MSCorEE.dll位于C:\WINDOWS\system32目录下,用来判断一台机器是否安装.NET Framework.初如化的CLR会去加载EXE程序集,并从函数入口点Main()开始执行程序,CLR为Main方法中调用的Console类型分配一个单独的内部结构,并为每个该类型的每个方法付上地址,以便该方法调用的时候使用,当首次调用WriteLine()方法时,会去调用JIT编译器,JIT编译器从元数据中查找WriteLine方法,把它编译成本地的CPU代码.并修改存储在Console类型中WriteLine的指针,这样子第二次开始调用WriteLine方法可直接执行本地的CPU代码.另外对元数据有点补充,元数据有二张表,一张是类型表,如用来核对编译时的参数类型.另一个是成员表.说明该托管模块有哪些成员.托管应用程序的执行过程就介绍到这边,下面介绍一下Office应用程序的执行过程.

     VSTO创建的两种解决方案,不管是文档级自定义项,还是应用程序级外接程序,部署后都是由office文档和程序集(dll文件)两个部份组成.当打开具体托管代码office文档时,VSTO加载程序将启动VSTO 运行库(Runtime),创建应用程序域并将该应用程序域的策略设置为不信任“我的电脑”区域.接着VSTO 运行库初始化公共语言运行库(CLR)到应用程序域中.被初始化的CLR加载与文档对应的托管程序集.托管程序通过主互操作程序集PIA(适配器)来捕获文档中发生的事件.接下去具体谈谈Office文档调用程序集的过程.

     1.文档级自定义项的体系结构

     1).2007 Microsoft Office system 的自定义项体系结构

  

    不管是文档级自定义项,还是应用程序级外接程序,都存在着指针,用来保存关链的托管程序集的地址.在Office2007文档提供了_AssemblyLocation 属性,用来存储部署清单.当用户打开属于 2007 Microsoft Office 自定义项的文档时,应用程序从 _AssemblyLocation读取部署清单.接着从部署清单中读取应用程序清单.来查找最新的文档级自定义项程序集.自定项程序集过主互操作程序集PIA与Office COM组件进行通信.

      2).Microsoft Office 2003 的自定义项体系结构

 

     在Office2003文档级自义定项中,不同的是用运行时存储控件来保存应用程序清单.当用户打开属于 2003 Microsoft Office 自定义项的文档时,应用程序从运行时存储控件中读取应用程序清单.应用程序清单加载可选的部署清单来查找最新的文档级自义定项程序集.自定项程序集过主互操作程序集PIA与Office COM组件进行通信.

     在此有必要说说VSTO Runtime 3.0和VSTO Runtime 2.0加载组件是不同的.在VSTO Runtime 3.0,应用程序首先加载VSTOEE.dll组件,接着加载VSTOLoader.dll组件来初始化公共语言运行库.而在VSTO Runtime 2.0只提供AddinLoader.dll来初始化公共语言运行库.

     2.应用程序级外接程序的体系结构

     1).2007 Microsoft Office system 的外接程序体系结构

 

     与文档级自定义项程序相比,应用程序外接程序是通过注册来发现应用程序的.当用户打开属于 2007 Microsoft Office 应用程序外接程序文档时.应用程序读取注册表项,接着读取部署清单.从部署清单中读取应用程序清单来查找最新的外接程序程序集.外接程序程序集通过主互操作程序集(PIA)与Office COM组件通信.

     2).Microsoft Office 2003 的外接程序体系结构

     与Microsoft Office 2007 的外接程序相比.加载外接程序程序集的过程基本上是一样的.有一点不同的是应用程序清单加载可选择的部署清单来查找最新的外接程序程序集,外接程序程序集通过主互操作程序集(PIA)与Office COM组件通信.