我试图取得所有权并在C#中更改文件的ACL,但即使作为管理员,我也得到了例外:
System.UnauthorizedAccessException: Attempted to perform an unauthorized operation.
运行该程序的用户能够获得所有权并通过Windows界面更改权限。
我的代码:
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
我甚至添加了一个检查,以确保当前用户是管理员组的成员:
WindowsIdentity wi = WindowsIdentity.GetCurrent();
WindowsPrincipal wp = new WindowsPrincipal(wi);
bool isAdmin = wp.IsInRole(WindowsBuiltInRole.Administrator); //returns true
背景信息:我正在创建一个WinPE图像,需要替换winload.exe.mui文件。
此外,此文件的当前权限仅授予“受信任的安装程序”的完全访问权限。
我在Windows 7上运行
发布于 2013-08-08 04:29:56
我通过使用System.Diagnostics.Process
在命令外壳中运行takeown
解决了这个问题。然后我就可以毫无错误地设置访问控制了。
奇怪的是,takeown
可以工作,但等效的.NET库却不行。
发布于 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[^]
https://stackoverflow.com/questions/18021474
复制相似问题