Outlook -互操作询问我是否要批准证书
本文关键字:证书 是否 互操作 Outlook | 更新日期: 2023-09-27 18:18:54
我使用interop来获得所有本地outlook联系人的列表(下面的代码)。这一切都很好,除了一种情况:当我没有outlook打开的时候,我使用的代码,我得到一个消息框,大约2秒后消失。消息框问我(翻译后的英文版本可能略有不同):"为这个网站配置mailboxxyz-accept服务器配置?"
查看消息并查看本地事物如何配置后,我看到我的公司正在outlook中使用证书,并且正如它所看到的那样:
- 如果outlook正在运行,那么我的互操作功能正在使用证书,因此消息框不会弹出
- 如果outlook没有运行,那么我的互操作功能不会自动使用证书,因此弹出窗口来询问我是否要接受它。
增加了一层奇怪的是,函数的使用成功,消息框在函数完成后几秒钟弹出,然后在2秒后消失。
Microsoft.Office.Interop.Outlook.Application outlookHandler = new Microsoft.Office.Interop.Outlook.Application();
Microsoft.Office.Interop.Outlook.Items outlookItemsCollection;
MAPIFolder folderContacts = (MAPIFolder)outlookHandler.Session.GetDefaultFolder(OlDefaultFolders.olFolderContacts);
outlookItemsCollection = folderContacts.Items;
foreach (var outlookItem in outlookItemsCollection)
{
.....
}
还有一种方法可以得到这种现象:当outlook没有运行时,我可以试着启动它:
Microsoft.Office.Interop.Outlook.Application outlookHandler = new Microsoft.Office.Interop.Outlook.Application();
var mm = outlookHandler.GetNamespace("MAPI");
mm.Logon(Type.Missing, Type.Missing, true, true);
// Same for the second true being false instead.
当我这样做时,outlook在要求默认配置文件后要求证书。
我现在的问题是:有什么方法可以防止这种弹出发生(或告诉互操作方法使用证书没有询问)?
我要先说明这不是一个优雅的解决方案,但它应该可以工作。
// check to see if outlook is running
System.Diagnostics.Process[] prcs = System.Diagnostics.Process.GetProcessesByName("outlook");
// if the found prcs length is 0, outlook isn't running
if(prcs.Length == 0)
{
// start outlook
System.Diagnostics.Process.Start("path to outlook");
// wait for outlook to load
// call your interop code
}
else
// outlook was found as an open process
// call your interop code
这是围绕你的问题而不是解决根本问题。如果没有例外或其他情况,我们很难真正找到。