使用c#获取系统文件

时间:2014-04-25 13:20:24

标签: c# file system

我是一家小型供暖公司的系统管理员,前几天会议的要求之一是我们为网络上的每台机器(49)备份c:\ windows \ system32 \ config,包括我的

由于目录被锁定(这是正确的),我似乎无法访问这些文件。即使是域管理员。

这有什么办法吗?也许通过注册表?

旧的c:\ windows \ repair文件夹似乎已经在Windows 7 SP1中消失,这就是我以为我会这样做的。

我已经建议了机器的完整备份映像(我提出的Acronis True Image),但我们现在没有空间要求或时间来备份每台机器(我们使用大约13台不同的供应商机器)所以为每个人创建一个图像也会很痛苦。因此,当它们中断时修复机器是我们唯一的希望,这种情况经常发生并且通常会导致完全重建。拥有系统文件将允许我们修复轻微的窗口错误,而不是重建整个机器。

除非有人有其他建议吗?

我在c#中创建程序是我认识和学习的唯一语言之一。我计划将其作为全局策略中的启动脚本,以便每次有人登录时都可以备份文件。

清单显示

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

源代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace ConsoleApplication3
{
 class Program
 {
    static void Main(string[] args)
    {

        /// Get DEFAULT
        File.Copy(@"C:\Windows\System32\config\DEFAULT", @"C:\DEFAULT");
        /// Then FTP/COPY TO NAS
        /// SOURCE CODE HERE
    }
 }
}

添加了我的源代码,我得到的错误是

+       $exception  {"Could not find    file'C:\\Windows\\System32\\config\\DEFAULT'.":"C:\\Windows\\System32\\config\\DEFAULT"} System.Exception {System.IO.FileNotFoundException}

http://i.imgur.com/94pEa1M.png

2 个答案:

答案 0 :(得分:2)

即使使用完整的本地/域管理员权限,也无法从正在运行的系统中复制此文件夹的内容。访问此文件夹的内容受到严格限制,因为它包含Windows操作系统中最易受攻击且安全的数据文件 - 系统注册表,存储密码库,SAM数据库,内部内核和安全日志。它们始终由具有explit读/写权限的系统打开,没有任何共享访问权限。在内核文件系统驱动程序中也限制访问它们。

没有任何合法和官方记录的方式来复制它们。你想做的事情也是非法的非法......只是不要复制它们。

答案 1 :(得分:1)

您必须以管理员身份运行您的应用程序。没有其他办法。

您可以通过更改应用程序清单来强制执行此操作。对此有一个很好的答案:How do I force my .NET application to run as administrator?