Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Outlook-互操作询问是否要批准证书_C#_Outlook_Office Interop - Fatal编程技术网

C# Outlook-互操作询问是否要批准证书

C# Outlook-互操作询问是否要批准证书,c#,outlook,office-interop,C#,Outlook,Office Interop,我正在使用interop获取所有本地outlook联系人的列表(代码如下)。这一切都很好,除了一种情况:当我在使用该代码期间没有打开outlook时,我会收到一个messagebox,大约2秒钟后它会再次消失。messagebox问我(翻译后的英文版本可能略有不同):“配置此网站的mailboxxyz accept服务器配置?” 在查看消息并查看本地内容的配置后,我发现我的公司正在outlook中使用证书,并且在查看时,它是这样的: 如果outlook正在运行,则我的互操作功能正在使用证书,因

我正在使用interop获取所有本地outlook联系人的列表(代码如下)。这一切都很好,除了一种情况:当我在使用该代码期间没有打开outlook时,我会收到一个messagebox,大约2秒钟后它会再次消失。messagebox问我(翻译后的英文版本可能略有不同):“配置此网站的mailboxxyz accept服务器配置?”

在查看消息并查看本地内容的配置后,我发现我的公司正在outlook中使用证书,并且在查看时,它是这样的:

  • 如果outlook正在运行,则我的互操作功能正在使用证书,因此不会弹出messagebox
  • 如果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

这可以解决您的问题,而不是解决根本问题。没有例外或任何其他情况,很难真正了解到底。

在附加测试后添加了更多信息,即每个outlook客户端都有一个证书,或者exchange服务器正在使用outlook客户端必须接受的证书?据我所知,exchange服务器正在使用证书。听起来您可能遇到SSL错误,这导致您的互操作失败。不过我可能错了。你的程序有没有抛出异常?没有抛出异常,甚至没有警告