在C#中编写文件备份实用程序

时间:2009-09-21 16:27:01

标签: c# security backup ntfs

- BEGIN RANT -

我想要做的就是复制“Documents and Settings”文件夹以在Windows Server 2003中对其进行备份,因此在擦除服务器以将操作系统升级到以后,我们可以根据需要轻松地从中获取旧文件Windows Server 2008。 但是,当我尝试复制它时,我收到有关NTUSER正在使用等的错误。 令人非常恼火的是,管理员不能只使用Windows资源管理器来复制文件夹,但无论如何。

我没有时间跳过安全箍,消灭权限。 我没有时间启动一个HUGE文件夹副本,只是让它在运行到打开文件句柄时通过操作失败一些随机%。 我没有时间反复重复这个过程,每次都打开文件句柄并用进程资源管理器关闭它,从而使系统不稳定作为副作用。

- END RANT -

我知道用户模式进程可以有某种标志,允许它绕过NTFS安全。

  • 如何将此“备份”角色(SE_BACKUP_NAME / SE_RESTORE_NAME)提供给流程,例如C#程序?

  • 是否可以在托管代码中完成(或者我将不得不挖掘Win32 API文档,或者手写清单并嵌入他们知道的地方,或者追踪一些模糊的备份程序注册命令行的实用程序)?

  • 如何使用备份语义在C#中打开文件,以便我可以复制文件?

  • 打开文件句柄(带有独占读锁)是否会干扰读取文件以进行备份,或者打开文件以备份语义处理,并在打开备份文件时暂时挂起写入文件

我在这里问,因为在stackoverflow保持记录是有用的信息,有人可能会掏出他们的头顶,我没有时间查找自己。谢谢。

很快,我将把一些服务器升级到Windows Server 2008的噩梦并学习icacls命令实用程序,这要归功于Microsoft删除GUI支持以编辑多个文件夹/文件的安全性(智能移动。不是。)< / p>

1 个答案:

答案 0 :(得分:0)

我已经使用Microsoft Synchronization Framework创建了自己的备份和放大器还原应用程序以迁移用户配置文件和其他相关文件Sync Framework至少可以选择无提示失败并在没有提示文件正在使用时继续,这是我想要的行为。

由于它是一个同步框架,因此它具有一些与冲突管理相关的能力。我不需要它们,但除了文件同步之外,它还有其他用于数据库和Web同步的“提供者”。

使用psexec远程运行​​程序可能会减少正在使用的文件数量。在我的情况下,我只关心“当前”用户,因此该程序由本地用户运行并备份到网络共享。

Sync Framework确实需要安装MSI,但我也使用PSExec。