word add-in 卸载时如何清除自定义的按钮和菜单

我们在做一些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事件在创建新文档、打开已有文档或激活其他文档时发生,保证了下面的代码会被执行。

    private   bool  Initialized  =   false ;

private   void  wordApp_DocumentChange()
        
{
            
if (!Initialized)
            
{
                
//变换模板,使用Office插件模板来保存当前按钮和菜单的设置。当卸载时会自动卸载该模板,所以按钮和菜单会自动删除
                Word.Template currentTpl = wordApp.CustomizationContext as Word.Template;    
                
foreach(Word.Template tpl in wordApp.Templates)
                
{

                    
if(tpl.Name == "Office插件模板.dot"//the name of the template you installed
                    {
                        wordApp.CustomizationContext 
= tpl;

                        
//在Office插件模板模板上初始化菜单和按钮
                        InitialMenuList();
                        tpl.Save();
//保存对该模板的更改

                        Initialized 
= true;

                        wordApp.CustomizationContext 
= currentTpl;
                        
break;
                    }

                }

            }

        }

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


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

http://www.cnblogs.com/anderslly/archive/2009/05/28/remove-vs-addin-menu.html
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值