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

推荐订阅源

K
Kaspersky official blog
Martin Fowler
Martin Fowler
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
V
Visual Studio Blog
博客园_首页
Engineering at Meta
Engineering at Meta
The Cloudflare Blog
MongoDB | Blog
MongoDB | Blog
Blog — PlanetScale
Blog — PlanetScale
T
The Blog of Author Tim Ferriss
雷峰网
雷峰网
D
Docker
博客园 - 司徒正美
S
SegmentFault 最新的问题
M
MIT News - Artificial intelligence
博客园 - 叶小钗
博客园 - 三生石上(FineUI控件)
U
Unit 42
J
Java Code Geeks
A
About on SuperTechFans
N
Netflix TechBlog - Medium
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
Security Affairs
I
Intezer
Cisco Talos Blog
Cisco Talos Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
B
Blog RSS Feed
P
Privacy & Cybersecurity Law Blog
T
Tenable Blog
T
Threatpost
H
Hacker News: Front Page
G
Google Developers Blog
博客园 - 【当耐特】
Hugging Face - Blog
Hugging Face - Blog
Apple Machine Learning Research
Apple Machine Learning Research
L
Lohrmann on Cybersecurity
大猫的无限游戏
大猫的无限游戏
Google DeepMind News
Google DeepMind News
A
Arctic Wolf
S
Secure Thoughts
GbyAI
GbyAI
NISL@THU
NISL@THU
S
Security @ Cisco Blogs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Webroot Blog
Webroot Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
O
OpenAI News
Spread Privacy
Spread Privacy
Application and Cybersecurity Blog
Application and Cybersecurity Blog

博客园 - 小诈

[.net]正则表达式整理 今日所思 伟大的意大利夺冠了!疯狂庆祝! 制作包含.net framework的安装包 解决不能上网的问题(Wincock绑架) [ASP.NET揭密读书笔记]额外的控件和资源 [ASP.NET揭密读书笔记]应用程序跟踪和监视 [ASP.NET揭密读书笔记]ADO.NET介绍 [ASP.NET揭密读书笔记]用户自定义控件 [ASP.NET揭密读书笔记]连接池 安装Ubuntu 痛苦的胃镜检查 [转载]微软好员工的十个标准 新年新气象,恭喜发财 WEB中服务器端Table的行集中要注意ViewState 2005年年终总结 招聘.NET高级软件工程师 DataTable.Select方法的性能问题 [转贴]Visual Studio 2005常用插件搜罗
word add-in 卸载时如何清除自定义的按钮和菜单
小诈 · 2006-07-05 · via 博客园 - 小诈

我们在做一些office的插件(add-in)时会遇到一个问题,当我们卸载自定义的插件时一般不能把产生的按钮、自定义菜单等删除干净。即使按照微软官方的一些例子文档来建立和卸载add-in,这个问题依然存在。通常是按钮依然存在,但是没有作用了,又称为“僵尸程序”。
由于暂时没有找到卸载excel add-in好的解决方案,这里只介绍如何干净的卸载word add-in。按照微软的一些例子中的提供的方法,在 OnBeginShutdown(该事件在word进程关闭之前发生)中调用button.Delete()进行相关按钮的删除工作。但是此处其实是有一个异常抛出的:Exception from HRESULT: 0x800A01A8。只不过office默认是不处理这个异常也不显示,所以我们觉得像没发生一样。这里错误本质是我们的自定义菜单和按钮是存放在模板中的,而在OnBeginShutdown之前模板就已经关闭了,所以就出现了'Object Required'的异常。所以这些代码都不会执行成功,也就删除不了我们的自定义菜单了。
解决方法是使用另外一个空白模板来解决这个问题,office有个启动目录(通常是C:\Program Files\Microsoft Office\OFFICE11\STARTUP),在此目录下的word模板在word启动时会自动加载,我们添加一个自己的模板用来做自定义按钮和菜单的容器,将这个模板放在add-in安装包中这样卸载的时候就自动删除了这个模板,也就删除了那些自定义按钮和菜单了。然后剩下的工作就是把默认的normal.dot模板换为我们自定义的模板(以下称addin.dot)作为自定义按钮的容器了。word中有个属性CustomizationContext 是用来指定使用的模板的。我们在OnConnect方法中执行下面的代码{wdApp = (Microsoft.Office.Interop.Word.Applcation)application;    wdApp.DocumentChange+=new Microsoft.Office.Interop.Word.ApplcationEvents4_DocumentChangeEventHandler(WordApp_DocumentChange);}DocumentChange事件在创建新文档、打开已有文档或激活其他文档时发生,保证了下面的代码会被执行。

通过这样一个变换的过程,我们就实现了将自定义按钮和菜单保存到自定义模板上,卸载时也就卸载这些按钮和菜单,保证用户office环境的干净。

附录1:将word模板加入安装包的方法,右键安装项目的“目标计算机上的文件系统”->添加特殊文件夹->Program Files文件夹,然后依次添加Microsoft Office、OFFICE11、STARTUP文件夹,然后添加该模板文件。
附录2:Excel并未提供相关的编程模型,所以excel下面的清除还没有解决。目前知道excel下的默认模板是Excel11.xlb(C:\Documents and Settings\用户名\Application Data\Microsoft\Excel目录下)。