【问题标题】:VSTO Outlook: Handle when Outlook disables the Add-in on startupVSTO Outlook:当 Outlook 在启动时禁用加载项时处理
【发布时间】:2022-11-04 21:07:46
【问题描述】:

我有一个 VSTO Outlook 加载项,有时(出于某种我不知道的原因)在启动时比正常速度慢,因此 Outlook 会自动禁用它。

有没有办法让 Outlook 在禁用加载项后再次自动重新启动它?我猜,一旦插件被禁用,就意味着它没有运行,所以在这种情况下(一旦被 Outlook 禁用),插件无法自行重启,对吧?

【问题讨论】:

    标签: .net outlook vsto outlook-addin office-addins


    【解决方案1】:

    正确的。您最好的选择是确保您的插件在 Outlook 正在查找时不会在启动时做太多事情。当然,由于您使用的是 VSTO,.Net 运行时可能会在您的单行代码执行之前花时间启动,从而惩罚您。

    【讨论】:

      【解决方案2】:

      发生这种情况时,我注意到在 Outlook 中选择“不监视此加载项”,然后在“DoNotDisableAddinList”注册表子项中为加载项添加一个条目 - 然后如果加载项停止自动禁用只是“缓慢”加载。

      我不确定在该位置的注册表中创建手动条目是否也可以永久停止自动禁用 - 或者它是否会在设定的时间(如 30 天)后自动删除。但是,我看不出尝试有什么坏处。我也会试一试并报告(大约 30 天左右)。

      对我来说,注册表项位于 HKEY_CURRENT_USER 配置单元中的以下子项中:

      SOFTWAREMicrosoftOffice.0OutlookResiliencyDoNotDisableAddinList
      

      例如,如果加载项的名称在 SOFTWAREMicrosoftOfficeOutlookAddins 中列为“MyCompany.MyOutlookAddin”,那么您将在上述位置创建一个具有该名称的 DWORD 值,并将其值设置为“1”。

      此外,如果您没有找到“Resiliency”子项文件夹,请注意注册表中这两个“Outlook”位置的细微差别(起初我错过了这个):

      SOFTWAREMicrosoftOffice.0OutlookResiliencyDoNotDisableAddinList
      

      相对

      SOFTWAREMicrosoftOfficeOutlookAddins
      

      另外 - 如果您仍然没有找到“Resiliency”文件夹,那么可能是您从未为加载项选择“不监视”,在这种情况下,您可以自己创建文件夹(在 RegEdit 中手动或通过像 Inno Setup 这样的安装程序)。

      更新

      我想我找到了另一个关于它是如何工作的线索。看起来 Outlook 还记录了您在另一个名为“NotificationReminderAddinData”的“弹性”子项中单击“不监视此插件”的时间:

      SOFTWAREMicrosoftOffice.0OutlookResiliencyNotificationReminderAddinData
      

      在我的机器上,我正在开发的加载项存储了两个值,第一个是 DWORD 值,当我单击“不监视此加载项”时,它似乎是 Epoch time。对于我的加载项,记录的值是“1664547917”,对我来说,它转换为 2022 年 9 月 15 日上午 10:15 - 听起来很正确。

      (你不知道吗 - 我几天前刚刚更改了插件的名称,今天才重新安装它,这意味着我今天可以测试 30 天计时器......如果我没有'没有改变它的名字......唉。)

      另一个值在我的加载项名称末尾附加了“dtype”。这也是一个 DWORD 值,但设置为“0”。我想知道当您单击“不监视此加载项”时,这是否可能等同于 30 天选项。

      但事情是这样的——在我的“DoNotDisableAddinList”子项中,还列出了“TeamsAddin.Connect”插件......但是“NotificationReminderAddinData”中没有相应的条目......这让我想知道这是否真的您如何永久防止自动禁用!我敢打赌。我会试一试并报告。

      更新 2

      确认将加载项的名称添加到“DoNotDisableAddinList”注册表子项会永久禁用 Outlook 的(嗯...)自动禁用功能。

      此外 - 您可以使用第二个加载项以编程方式重新加载第一个加载项。我设置了第二个“更新程序”加载项,用于暂时禁用主加载项以在其上运行更新等。使用this 等代码卸载加载项后,Outlook 然后设置“LoadBehavior " 将注册表中的值设置为 2 以表示“不加载”。在我的更新程序加载项完成它的工作后,它会将注册表中的 LoadBavior 值设置回 3 以进行加载。重新启动 Outlook 然后加载主加载项,但现在已更新。

      【讨论】:

        猜你喜欢
        • 2017-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-04
        • 2020-09-18
        • 1970-01-01
        • 2023-03-17
        • 1970-01-01
        相关资源
        最近更新 更多