【问题标题】:COM Add-in not going away in word 2007COM 加载项不会在 word 2007 中消失
【发布时间】:2011-07-23 23:42:54
【问题描述】:

我有两个不同的 COM 加载项,一个用于 Word 2003,一个用于 Word 2007。

Word 2003 每次都像魅力一样工作,没有问题等...但是现在,当我打开 Word 2007 时,Word 2003 中的按钮出现在我的 Word 2007 功能区中。即使在我禁用我的加载项或清理我的项目之后,这种情况仍然会发生...我已经尝试了所有方法,包括删除我的 Word 2003 加载项的所有 .dll,但问题仍然存在...

对问题所在有什么建议吗?

干杯

【问题讨论】:

    标签: c# vsto word-2007 comaddin word-2003


    【解决方案1】:

    如果您在除 normal.dot 之外的模板中配置这些按钮,它们将在您安装时自动“消失”。

    对 Normal.dot 进行更改通常被认为是不好的做法,但许多人没有意识到,除非您在创建自己的按钮和工具栏之前在 word 中设置“CustomizationContext”属性,否则这正是您所要做的做,修改 normal.dot,这些更改将在您卸载插件后持续存在。

    【讨论】:

    • 这是否也适用于 COM 插件?
    • 另外,如果它确实在 normal.dot 中,我该如何解决这个问题?我在单词选项上查看了它,我没有在其中显示任何特定的添加...:/
    • 插件不会在 normal.dot 中,但是如果您在十六进制编辑器中打开文件并浏览它,您应该会看到菜单和工具栏定义、名称等。删除它是在此处使用 danbystroms 的代码,或者只是删除 normal.dot 并让 word 重新生成它(这是我通常所做的,也是很多客户所做的,所以我一直非常努力地尝试不依赖 mods to Normal .dot 因为那个。
    • 关于 COM 与 .net 插件。归根结底,.net VSTO 插件只是 com IExtensibility 内容的 .net 包装器。它们基本上是同一头野兽,所以是的,它也适用于裸 COM 插件。
    • 我不听你的回答。如何为不同的模板配置按钮?您在哪里/如何设置 CustomizationContext?
    【解决方案2】:

    作为卸载过程的一部分,您必须“手动”删除该按钮。这是我使用的代码:

        public static void removeWordToolbarButton(
            Microsoft.Office.Interop.Word.Application word )
        {
            var commandBar = word.CommandBars["Tools"];
            var btn = commandBar.FindControl(
                Microsoft.Office.Core.MsoControlType.msoControlButton,
                System.Reflection.Missing.Value,
                "name_of_the_button",
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value ) as Microsoft.Office.Core.CommandBarButton;
            if ( btn != null )
            {
                btn.Delete( -1 );
                Marshal.ReleaseComObject( btn );
            }
            Marshal.ReleaseComObject( commandBar );
        }
    

    【讨论】:

    • 非常感谢丹比斯特罗姆!这很有帮助,因为我实际上有工具栏按钮要删除,但我也有一个菜单栏按钮可以放入我的功能区,该代码也应该适用于它吧?
    • 这段代码应该在哪里调用?从丝带?安装程序类?
    【解决方案3】:

    我怀疑问题出在 normal.dot 模板中。 删除按钮、命令栏等后尝试保存普通模板:

    wordApplication.NormalTemplate.Save();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多