如何使用 winform 应用程序从 Outlook 打开文件附件?

How do I open a file attachment from Outlook with my winform application?

我编写了一个 winform 应用程序,并使用 Inno Setup 创建了一个安装程序,以便自定义文件扩展名与其相关联。

应用程序设置为如果双击关联的文件类型,应用程序将自动打开并加载文件。如果从桌面或文件资源管理器中双击该文件,则此方法可以正常工作。

但是,我们注意到在尝试从 Outlook 内部打开文件附件时出现问题。正在生成此错误:

System.UnauthorizedAccessException

我在我的应用程序中发现了错误并检查了提供给程序的文件路径。它在文件系统中不存在(当我尝试浏览它时)。

C:\User\MyUserName\AppData\Local\Microsoft\Windows\INetCache\Content.Outlook\MXIIIP00\MyFilename.CustomExtension

...\Microsoft\Windows\ 之后的部分不存在(据我所知)。

有没有其他人遇到过这个问题并且知道如何解决?

更新:

如果我打开一个 DOS 提示符 - 我实际上可以到达这个位置,即使它没有显示在 Windows Explorer 中。

更新 2:

如果我直接将路径复制到 Windows 资源管理器中,我也可以在这里看到文件。但是,如果我从此处双击该文件 - 我的应用程序仍然无法加载该文件。

更新 3:

Outlook 保存的文件(以及我的应用程序正在尝试打开的文件)似乎是空的。这可以解释为什么我的应用程序无法处理它。当我发送文件时,Outlook 似乎正在对文件进行处理。当我发送它时它开始为 72KB,但当我收到它时 - 它是 252B。

这是授权的问题。

您可以尝试 运行 您的应用程序和管理员模式下的 Outlook 以获得成功 - 至少它是强制性的,运行 两者处于相同的授权级别。

或者甚至尝试在 Windows TEMP 文件夹中打开您的附件...但我想如果您不以编程方式将附件提取到该文件夹​​,您将无法从 Outlook 中获取它并打开它。

好的,事实证明这里有两个问题。

首先是关于我测试此功能的方式。为了模拟发送给客户的文件,我使用 Outlook 将我的文件作为附件发送给自己。由于某些(目前未知的)原因,Outlook 主动向我发送了一个空文件。当我登录到外部电子邮件客户端并将文件发送到 Outlook 时,文件仍然完好无损。

但是,我的应用程序仍然无法打开它。

第二个问题是创建的临时文件设置了只读属性。一旦我设置我的应用程序以关闭它,一切都运行良好。