我已经构建了一个 VSTO Outlook 加载项,当从对象资源管理器中选择邮件消息(IPM.Note 消息类)时,它只会在阅读窗格中显示一个相邻的表单区域。加载项在调试模式下按预期工作。但是,当使用安装程序安装时,加载项会正确加载(并且代码会在启动时触发 MessageBox.Show(),但不会显示表单区域。我已将 MessageBox.Show() 事件放在 RepInfoFactory_FormRegionInitializing 方法中但他们都没有开火。
我搜索了类似的情况,但只找到了整个加载项被禁用的情况。就我而言,它加载得很好。我尝试以管理员身份启动 Outlook,但这似乎不会影响加载项。我还设置了环境变量以显示 VSTO 警报并记录它们,但没有记录任何内容——我怀疑是因为加载项加载正常。
由于我将 FormRegionMessageClass 属性设置为 Note,因此我仔细检查了资源管理器中的对象确实是 IPM.Note。
我正在运行 Outlook 2016(即点即用)和 VS 2019。
我会喜欢关于检查/尝试的任何其他建议。
谢谢!
public partial class ThisAddIn
{
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
MessageBox.Show("Addin Startup"); //this message box displays in both debug and installed version
}
}
partial class RepInfo
{
public static Outlook.ExchangeUser contact;
public static System.Data.DataTable dtRepHier;
public static System.Data.DataTable dtSubHier;
#region Form Region Factory
[Microsoft.Office.Tools.Outlook.FormRegionMessageClass(Microsoft.Office.Tools.Outlook.FormRegionMessageClassAttribute.Note)]
[Microsoft.Office.Tools.Outlook.FormRegionName("WATCHTOWER.RepInfo")]
partial class RepInfoFactory
{
//The code in this method only works in debug mode. The form only displays (under the stated conditions) when in debug mode.
private void RepInfoFactory_FormRegionInitializing(object sender, Microsoft.Office.Tools.Outlook.FormRegionInitializingEventArgs e)
{
//MessageBox.Show(e.FormRegionMode.ToString() + " " + e.FormRegionSize.ToString());
Outlook.MailItem myItem = (Outlook.MailItem)e.OutlookItem;
//MessageBox.Show(myItem.MessageClass);
if (myItem != null)
//MessageBox.Show(myItem.Sender.Name);
if (myItem.Sender != null)
{
{
contact = myItem.Sender.GetExchangeUser();
//MessageBox.Show(contact.Department);
if (contact != null && contact.Department != null && (contact.Department.Substring(7, 10) == "US-AVD-VAS"
|| contact.Department.Substring(7, 9) == "US-AVD-US"))
{ return; }
}
e.Cancel = true;
}
}
}
#endregion
// code continues
更新 根据下面@Eugene 的回复,我查看了为每个消息类插入注册表项的要求,因为Microsoft 的文档表明这必须通过Windows Installer 配置来完成。我尝试了以下但没有成功:
- 我的项目注册表项的名称是“Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office\Outlook\AddIns\COMPANY.CustSvc.Watchtower”。据我了解,这必须作为 FormRegions 注册表项的一部分列出。
- FormRegions\IPM.Note 分支是“Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office\Outlook\AddIns\FormRegions\IPM.Note”
- IPM.Note 的条目是“WATCHTOWER.RepInfo”(这是 FormRegionName 属性的名称),值为“=COMPANY.CustSvc.Watchtower”(注册表项的名称。
- 我根据@Eugene 的建议添加了日志记录,并且没有从 FormRegionInitializing 事件中记录任何内容,因为它没有触发。
关于为什么 FormRegionInitializing 没有触发的任何其他想法?