尝试从vista中的标准用户帐户访问文件时获取System.UnauthorizedAccess异常

时间:2011-04-15 18:18:45

标签: c# .net windows security

我正在尝试在Windows中的公共应用程序数据位置生成许可证密钥文件,因此当标准用户帐户尝试访问我的应用程序时,应用程序可以检查许可证密钥是否有效。在安装期间使用管理员帐户创建许可证文件,但是当标准用户帐户尝试访问该文件时,将抛出System.UnauthroizedAccess异常。

以下是我用来创建存储许可证密钥文件的目录的代码。

FileSystemAccessRule fsAccessRules = new FileSystemAccessRule("USERS", FileSystemRights.FullControl, AccessControlType.Allow);
Directory.CreateDirectory(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\COMPANYNAME\\");
Directory.GetAccessControl(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\COMPANYNAME\\").AddAccessRule(fsAccessRules);

感谢。

1 个答案:

答案 0 :(得分:0)

我认为问题在于你只修改了内存中的FileSystemSecurity对象,这意味着你没有保存更改。在AddAccessRule的文档中,您似乎需要在调用AddAccessRule后调用SetAccessControl将更改保存回磁盘。这将使用您添加的访问规则更新文件上的安全描述符。

此CodeProject文章有一些很好的示例代码:Allow write/modify access to CommonApplicationData

另外需要考虑的一件事:如果您只需要用户能够读取此文件,您可以考虑授予他们更有限的一组权限,例如FileSystemRights.Read。这可以防止用户实际修改许可证文件,假设他们不需要这种能力。