C# Outlook-互操作询问是否要批准证书
我正在使用interop获取所有本地outlook联系人的列表(代码如下)。这一切都很好,除了一种情况:当我在使用该代码期间没有打开outlook时,我会收到一个messagebox,大约2秒钟后它会再次消失。messagebox问我(翻译后的英文版本可能略有不同):“配置此网站的mailboxxyz accept服务器配置?” 在查看消息并查看本地内容的配置后,我发现我的公司正在outlook中使用证书,并且在查看时,它是这样的:C# Outlook-互操作询问是否要批准证书,c#,outlook,office-interop,C#,Outlook,Office Interop,我正在使用interop获取所有本地outlook联系人的列表(代码如下)。这一切都很好,除了一种情况:当我在使用该代码期间没有打开outlook时,我会收到一个messagebox,大约2秒钟后它会再次消失。messagebox问我(翻译后的英文版本可能略有不同):“配置此网站的mailboxxyz accept服务器配置?” 在查看消息并查看本地内容的配置后,我发现我的公司正在outlook中使用证书,并且在查看时,它是这样的: 如果outlook正在运行,则我的互操作功能正在使用证书,因
- 如果outlook正在运行,则我的互操作功能正在使用证书,因此不会弹出messagebox
- 如果outlook未运行,则我的互操作功能不会自动使用证书,因此弹出窗口会询问我是否要接受证书
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
这可以解决您的问题,而不是解决根本问题。没有例外或任何其他情况,很难真正了解到底。在附加测试后添加了更多信息,即每个outlook客户端都有一个证书,或者exchange服务器正在使用outlook客户端必须接受的证书?据我所知,exchange服务器正在使用证书。听起来您可能遇到SSL错误,这导致您的互操作失败。不过我可能错了。你的程序有没有抛出异常?没有抛出异常,甚至没有警告