【问题标题】:Getting System Files with c#使用 c# 获取系统文件
【发布时间】:2014-04-25 13:20:24
【问题描述】:

我是一家小型供热公司的系统管理员,前几天会议的一个要求是我们为网络上的每台机器 (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

【问题讨论】:

  • 作为域管理员,您应该能够访问此文件夹。也许您忘记以提升的权限运行(以管理员身份运行)?

标签: c# file system


【解决方案1】:

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

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

【讨论】:

  • 感谢您的cmets,我没有意识到,我会提请上述权力注意的:)
  • 出色的分析!我的赞美。
【解决方案2】:

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

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

【讨论】:

  • 我已将 添加到清单中,现在它启动了 UAC,但是它在第一个文件上失败,说在尝试时抛出 filenotfound 异常复制整个目录
  • @user2944511:没有代码就无法分辨。您确定该文件存在并且拼写正确吗?
猜你喜欢
  • 1970-01-01
  • 2015-09-18
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-19
  • 2012-10-04
  • 2015-01-28
相关资源
最近更新 更多