alt*_*ive 7 c# io file file-security
我试图获取文件的所有权并通过C#删除它.该文件是iexplorer.exe,默认为当前所有者 - TrustedInstaller.FileSecurity.SetOwner方法似乎设置了指定的所有权,但实际上并没有更改初始所有者并且不会抛出任何异常.显然,下一次删除文件的尝试会引发异常.在代码中应该更改什么来获取文件的所有权并将其删除?
var fileS = File.GetAccessControl(@"C:\Program Files (x86)\Internet Explorer\iexplore.exe");
fileS.SetOwner(new System.Security.Principal.NTAccount(Environment.UserDomainName, Environment.UserName));
File.Delete(@"C:\Program Files (x86)\Internet Explorer\iexplore.exe");
Run Code Online (Sandbox Code Playgroud)
您必须明确启用SeTakeOwnershipPrivilege:
必须获取对象的所有权而不被授予自由访问权限.此权限允许将所有者值仅设置为持有者可合法分配为对象所有者的值.用户权限:获取文件或其他对象的所有权.
我建议你阅读Mark Novak撰写的精彩文章:可靠,安全,高效地管理托管代码中的权限.
和/或看看他的样本.
更新
用法示例:
var fileS = File.GetAccessControl(@"C:\Program Files (x86)\Internet Explorer\iexplore.exe");
Privilege p;
bool ownerChanged = false;
try
{
p = new Privilege(Privilege.TakeOwnership);
p.Enable();
fileS.SetOwner(new System.Security.Principal.NTAccount(
Environment.UserDomainName, Environment.UserName));
ownerChanged = true;
}
catch(PrivilegeNotHeldException e)
{
// privilege not held
// TODO: show an error message, write logs, etc.
}
finally
{
p.Revert();
}
if (ownerChanged)
File.Delete(@"C:\Program Files (x86)\Internet Explorer\iexplore.exe");
Run Code Online (Sandbox Code Playgroud)