【问题标题】:Enabling excel add-in programmatically以编程方式启用 excel 加载项
【发布时间】:2017-12-02 20:07:10
【问题描述】:

有时,如果我的 excel 插件最终位于禁用的 COM 插件中,它会被禁用,我可以使用以下代码启用它。但是,如果它最终出现在禁用项目中,我将无法使用此代码启用它。有没有办法可以启用禁用的项目。不知道我是否可以使用 regedit 来做到这一点。

我收到 COM 异常 {"Operation aborted (Exception from HRESULT: 0x80004004 (E_ABORT))"}

    xl.Application myApp = new xl.Application();

    foreach (COMAddIn currentAddIn in myApp.COMAddIns)
    {
        if (currentAddIn.Description == "Create Excel AddIn" && !currentAddIn.Connect)
        {
            try
            {


                currentAddIn.Connect = true;
            }
            catch (Exception)
            {
                CommonMethods.ExceptionHandler("Create tab couldn't be enabled", new StackTrace(true).GetFrame(0).GetFileLineNumber(), new StackTrace(true).GetFrame(0).GetMethod());
            }


            break;
        }

    }


    return false;
}

【问题讨论】:

  • 您无法阻止其他人禁用您。 “如果这成为可能,世界会是什么样子?” blogs.msdn.microsoft.com/oldnewthing/20040216-00/?p=40603
  • @mjwills 我不能在注册表中设置一些东西来再次启用它吗?
  • 仅供测试,不适合其他用户
  • 我正在运行单元测试,有时插件会被禁用。我有超过 200 个测试,不能只是停止它们,所以我可以手动启用插件
  • 在您手动启用加载项时非常快速地运行 ProcessMonitor 以查看哪个注册表项将其打开或关闭

标签: c#


【解决方案1】:

这是最好和最有效的解决方案。

using (RegistryKey myKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Office\Excel\Addins\Create.ExcelAddIn", true))
{
    if (myKey != null)
    {
        myKey.SetValue("LoadBehavior", "3", RegistryValueKind.DWord);
        myKey.Close();
    }
}

【讨论】:

  • 嗨,很高兴你让它工作了,它很好,但它不是最好的,因为 RegistryKey 是一个非托管资源,你必须处理它,这就是为什么在我向你展示的链接中我使用 @ 987654322@,例如using (subkey = key.OpenSubKey(kn)) {
【解决方案2】:

对于完全禁用的加载项,我知道的唯一方法是删除下面位置的注册表项,但在 Excel 打开时无法完成(将 16.0 更改为 Office 版本):

HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Word\Resiliency\DisabledItems\

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多