System.IO.Packaging.Package.Open()抛出UnauthorizedAccessException

时间:2010-11-12 21:41:34

标签: c#

我们有一个现有的应用程序,它使用System.IO.Packaging.Package类来读取大量结构化数据。除了尝试从只读源(如CD或DVD)打开包之外,我们的应用程序在所有方案中都能正常工作。

如果PackagePath位于只读媒体上,则以下行是我们的应用程序抛出异常的点:

_ourPackage = Package.Open(PackagePath, FileAccess.Read);

当数据存储在CD上时,上面的行会抛出UnauthorizedAccessException。我们不确定为什么会这样。我们试图以管理员身份运行,但它没有效果。

如上所述,我们仅指定读访问权限,因为此特定流程只需读取数据,我们通常会通过CD或DVD等介质分发打包数据。

为什么我们可能会遇到这种情况?

2 个答案:

答案 0 :(得分:1)

您没有指定FileMode,默认为FileMode.OpenOrCreate。在CD-Rom上执行此操作时,不确定Windows有多少这样的功能。使用允许您指定FileMode.Open的重载。下一步是尝试找出Windows不喜欢你的原因。

答案 1 :(得分:0)

我们的申请也有同样的问题。双击Outlook中的电子邮件附件时,文档已复制到 Temporary Internet Files 目录并设置为只读。当试图打开包(只读文件)时,抛出了UnauthorizedAccessException。

指定FileMode.OpenFileAccess.Read解决了这个问题:

using (Package package = Package.Open(projFilePath, FileMode.Open, FileAccess.Read))
{
   // do stuff
}