我已经编写了一个winform应用程序,并使用Inno Setup创建了一个安装程序,以便自定义文件扩展名与它相关联。
应用程序是这样设置的,如果双击相关的文件类型,则应用程序会自动打开并加载文件。如果从桌面或文件资源管理器中双击该文件,则可以正常工作。
然而,我们注意到一个问题,当试图从Outlook中打开一个文件附件。这个错误正在生成:
System.UnauthorizedAccessException
我已经捕获了应用程序中的错误,并检查了提供给程序的文件路径。它不存在于文件系统中(当我试图浏览到它时)。
C:UserMyUserNameAppDataLocalMicrosoftWindowsINetCacheContent.OutlookMXIIIP00MyFilename.CustomExtension
…之后的部分MicrosoftWindows不存在(据我所知)。
还有其他人遇到过这个问题并知道如何解决吗?
更新:
如果我打开dos提示-我实际上可以到达这个位置,即使它没有显示在Windows资源管理器
更新2:如果我将路径直接复制到Windows资源管理器中,我也可以在这里看到文件。但是,如果我从这里双击文件-我的应用程序仍然无法加载文件。
更新3:Outlook保存的文件(我的应用程序正在尝试打开)似乎是空的。这就解释了为什么我的应用无法处理它。当我发送文件时,Outlook似乎对文件做了一些事情。当我发送它时,它开始是72KB,但当我收到它时,它是252B。
这是AUTHORIZATION的问题。
你可以尝试在ADMIN模式下运行你的应用程序和Outlook来获得成功-至少它是强制性的,在相同的授权级别下运行。
或者甚至尝试在Windows TEMP文件夹中打开您的附件…但我猜如果你不通过编程方式将附件解压到该文件夹并打开它,你就无法从Outlook中获取它。
这里有两个问题。
第一个是关于我如何测试这个功能。为了模拟发送给客户的文件,我使用Outlook将我的文件作为附件发送给我自己。由于某种原因(目前还不清楚),Outlook自动向我发送了一个空文件。当我登录到外部电子邮件客户端并将文件发送到Outlook时,文件仍然完好无损。
但是,我的应用程序仍然无法打开它。
第二个问题是创建临时文件时设置了只读属性。一旦我设置了我的应用程序来关闭这个,一切都工作得很好。