我们有一个现有的应用程序,它使用System.IO.Packaging.Package类来读取大量结构化数据。除了尝试从只读源(如CD或DVD)打开包之外,我们的应用程序在所有方案中都能正常工作。
如果PackagePath位于只读媒体上,则以下行是我们的应用程序抛出异常的点:
_ourPackage = Package.Open(PackagePath, FileAccess.Read);
当数据存储在CD上时,上面的行会抛出UnauthorizedAccessException。我们不确定为什么会这样。我们试图以管理员身份运行,但它没有效果。
如上所述,我们仅指定读访问权限,因为此特定流程只需读取数据,我们通常会通过CD或DVD等介质分发打包数据。
为什么我们可能会遇到这种情况?
答案 0 :(得分:1)
您没有指定FileMode,默认为FileMode.OpenOrCreate。在CD-Rom上执行此操作时,不确定Windows有多少这样的功能。使用允许您指定FileMode.Open的重载。下一步是尝试找出Windows不喜欢你的原因。
答案 1 :(得分:0)
我们的申请也有同样的问题。双击Outlook中的电子邮件附件时,文档已复制到 Temporary Internet Files 目录并设置为只读。当试图打开包(只读文件)时,抛出了UnauthorizedAccessException。
指定FileMode.Open
和FileAccess.Read
解决了这个问题:
using (Package package = Package.Open(projFilePath, FileMode.Open, FileAccess.Read))
{
// do stuff
}