c# - 无法使用 NameSpace.Logon 启动带有特定配置文件的 Outlook
问题描述
我尝试使用以下代码启动 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' ...
有一个名为“Koch”的配置文件。但是使用此代码,无论输入哪个配置文件,Outlook 始终会打开默认配置文件(称为“Outlook”)。
“手动”启动 Outlook 时,它会询问配置文件,然后从选定的配置文件开始。
使用Process.Start
一切启动 Outlook 时,一切都按预期工作。
Process.Start("Outlook", $"/profile \"{profile}\"");
我如何确保NameSpace.Logon
按预期工作?
编辑
我注意到使用RDOSession.Logon
from Redemption 有效:
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
方法正常工作。
推荐阅读
- python - python - 如何使用数组(x,y)制作的曲线找到数组x1的图像?
- javascript - 如何仅将正则表达式字母添加到javascript上的数组拆分?
- spring - 一个应用程序中可能有两个上下文路径
- javascript - 如何确保所有 HTML 页面的字体都发生变化?
- sql - 为什么对于整数值 0,SQL 列的 SELECT Distinct 行为异常?
- javascript - Nuxt js 中的 localStorage 在 SSR 模式下不起作用
- c# - 时间:2019-05-10 标签:c#compiletime string hash to enum
- excel - Excel VBA Selenium FindElementXpath 变量错误
- php - 要求(供应商/autoload.php):无法打开流:没有这样的文件或目录
- python - 使用python的pymysql数据库存储错误