C# 无法使用命名空间启动具有特定配置文件的Outlook。登录

C# 无法使用命名空间启动具有特定配置文件的Outlook。登录,c#,outlook,office-interop,C#,Outlook,Office Interop,我尝试使用以下代码启动Outlook: static Application outlook; static NameSpace ns; static void Main(string[] args) { Console.WriteLine($"Outlook already running: {Process.GetProcessesByName("Outlook").Any()}"); Console.Write("Enter Profile: "); var pr

我尝试使用以下代码启动Outlook:

static Application outlook;
static NameSpace ns;

static void Main(string[] args)
{
    Console.WriteLine($"Outlook already running: {Process.GetProcessesByName("Outlook").Any()}");
    Console.Write("Enter Profile: ");
    var profile = Console.ReadLine().Trim();

    Console.WriteLine($"Using Profile: '{profile}' ...");

    outlook = new Application();
    ns = outlook.GetNamespace("MAPI");
    ns.Logon(profile, "", false, true);

    ns.GetDefaultFolder(OlDefaultFolders.olFolderInbox).Display();
}
输出为

Outlook already running: False
Enter Profile: Koch
Using Profile: 'Koch' ...
有一个名为“科赫”的档案。但是使用这段代码,Outlook总是打开默认配置文件(称为“Outlook”),无论输入哪个配置文件

“手动”启动Outlook时,它会请求配置文件,然后从选定的配置文件开始

使用
过程启动Outlook时。启动
一切正常

Process.Start("Outlook", $"/profile \"{profile}\"");
如何确保
NameSpace.Logon
按预期工作

编辑 我注意到从Redemption使用
RDOSession.Logon

RDOSession session = new RDOSession();
session.Logon(profile, Type.Missing, false, false);

使用此代码时选择了正确的配置文件。但是,由于我想使用Outlook Interop启动Outlook,这不是“解决方案”。

MSDN文档说明如下:

当用户第二次启动Outlook时,该Outlook实例在同一Outlook进程内运行,不创建新进程,并使用相同的配置文件

如果Outlook已在运行,则使用此方法不会创建新的Outlook会话或将当前配置文件更改为其他配置文件

您似乎正在另一个安全上下文下运行应用程序。查看任务管理器中正在运行的进程列表,确保没有Outlook进程仍在运行


此外,您还可以尝试使用UI选项选择配置文件传递
true
,以显示MAPI登录对话框,允许用户选择MAPI配置文件。因此,您可以确保
Logon
方法正常工作。

任务管理器中没有运行Outlook的其他实例。使用
ns.Logon(profile,”,true,true)不显示配置文件对话框。。。