我正在尝试在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);
感谢。
答案 0 :(得分:0)
我认为问题在于你只修改了内存中的FileSystemSecurity
对象,这意味着你没有保存更改。在AddAccessRule
的文档中,您似乎需要在调用AddAccessRule
后调用SetAccessControl
将更改保存回磁盘。这将使用您添加的访问规则更新文件上的安全描述符。
此CodeProject文章有一些很好的示例代码:Allow write/modify access to CommonApplicationData
另外需要考虑的一件事:如果您只需要用户能够读取此文件,您可以考虑授予他们更有限的一组权限,例如FileSystemRights.Read
。这可以防止用户实际修改许可证文件,假设他们不需要这种能力。