65.9K
CodeProject 正在变化。 阅读更多。
Home

删除 Vista 或 Windows 7 下无法删除的文件夹

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.73/5 (18投票s)

2011 年 6 月 28 日

CPOL

1分钟阅读

viewsIcon

37100

downloadIcon

2124

一个小工具,可帮助您摆脱难以移除的受保护或系统文件夹。

VistaDeleteFolder.png

引言

如果你像我一样,你可能遇到过一个不肯被删除的文件夹。

这篇文章的目的是编写一个小程序来帮助我们删除这个文件夹。这有多难呢?

背景

这篇文章是原始技巧和窍门的后续:删除 Windows 7 中的受保护文件夹

使用应用程序

  1. 运行可执行文件:VistaDeleteFolder.exe
  2. 小心选择你要删除的文件夹
  3. 按下开始按钮

幕后

嘿,这里是 CodeProject。你想看一些源代码,对吧?

这个程序的核心思想是修复每个文件和文件夹的访问权限。

private static void FixAccess(FileSystemSecurity sec)
{
    string currentUser = WindowsIdentity.GetCurrent().Name;
    sec.AddAccessRule(new FileSystemAccessRule
	(currentUser, FileSystemRights.FullControl, AccessControlType.Allow));
}

我还清除了所有现有的规则,希望避免冲突。

foreach (FileSystemAccessRule fsar in sec.GetAccessRules
	(true, true, typeof(System.Security.Principal.NTAccount)).OfType<filesystemaccessrule />().ToArray())
{
    sec.RemoveAccessRuleAll(fsar);
}

不幸的是,一开始大部分都失败了,我无法弄清楚原因。我以为解决方案是修复文件的所有权。

private static void FixOwner(FileSystemSecurity sec)
{
    var sid = sec.GetOwner(typeof(SecurityIdentifier));
    string currentUser = WindowsIdentity.GetCurrent().Name;
    var ntAccount = new NTAccount(currentUser);
    sec.SetOwner(ntAccount);
}

不幸的是,这还不够。应用程序需要在管理员模式下运行。可以通过更改可执行文件的清单文件来强制执行。

<asmv1:assembly manifestVersion="1.0" ...>
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
  <security>
  <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">


  <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />

  </requestedPrivileges>
  </security>
  </trustInfo>
...  
</asmv1:assembly>

更糟糕的是,即使这样仍然无法工作。我遇到一个异常,由于某种无法解释的原因,所有者的更改被拒绝。我继续在 Google 上搜索这个异常,偶然发现了 http://processprivileges.codeplex.com/。使用他们的库很简单。我添加了这一行。

using (new ProcessPrivileges.PrivilegeEnabler
	(Process.GetCurrentProcess(), Privilege.TakeOwnership))
{
    <original code here>
}

我没有深入研究这个库是如何做到的,但它奏效了。那个顽固的文件夹消失了。

历史

  • 2011 年 6 月 28 日:改进并发布为一篇文章
  • 2011 年 3 月 22 日:首次发布为技巧和窍门
© . All rights reserved.