首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SetAccessControl“未经授权的操作”,即使以管理员身份运行也是如此

SetAccessControl“未经授权的操作”,即使以管理员身份运行也是如此
EN

Stack Overflow用户
提问于 2013-08-03 00:05:55
回答 2查看 6K关注 0票数 1

我试图取得所有权并在C#中更改文件的ACL,但即使作为管理员,我也得到了例外:

代码语言:javascript
运行
复制
System.UnauthorizedAccessException: Attempted to perform an unauthorized operation.

运行该程序的用户能够获得所有权并通过Windows界面更改权限。

我的代码:

代码语言:javascript
运行
复制
string fileName = @"C:\temp\mount\Windows\System32\Boot\en-US\winload.exe.mui";
FileSecurity fileSec = File.GetAccessControl(fileName);

fileSec.SetOwner(WindowsIdentity.GetCurrent().User); 
File.SetAccessControl(fileName, fileSec); //exception thrown here

我甚至添加了一个检查,以确保当前用户是管理员组的成员:

代码语言:javascript
运行
复制
WindowsIdentity wi = WindowsIdentity.GetCurrent();
WindowsPrincipal wp = new WindowsPrincipal(wi);

bool isAdmin = wp.IsInRole(WindowsBuiltInRole.Administrator); //returns true

背景信息:我正在创建一个WinPE图像,需要替换winload.exe.mui文件。

此外,此文件的当前权限仅授予“受信任的安装程序”的完全访问权限。

我在Windows 7上运行

EN

回答 2

Stack Overflow用户

发布于 2013-08-08 04:29:56

我通过使用System.Diagnostics.Process在命令外壳中运行takeown解决了这个问题。然后我就可以毫无错误地设置访问控制了。

奇怪的是,takeown可以工作,但等效的.NET库却不行。

票数 1
EN

Stack Overflow用户

发布于 2014-02-02 22:17:48

您仍然可以在新方法中使用File.SetAccessControl()来代替FileStream.SetAccessControl()。我敢打赌它也是有效的。MSDN实际上推荐这种做法:

虽然可以在现有文件上使用FileStream类和SetAccessControl,但请考虑使用File.SetAccessControl方法,因为它更易于使用。

http://msdn.microsoft.com/en-us/library/system.io.filestream.setaccesscontrol.aspx[^]

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18021474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档