5

我正在为我工​​作的公司创建一个应用程序,它将为我们提供的一些软件备份数据。它可以选择将 SQL 数据库、文件夹、文件和注册密钥添加到备份作业中,然后将其放入 Zip 文件中。还有一些选项可以在需要时恢复备份。

我在注册表备份和还原方面遇到问题。我已经经历了多次尝试让它工作的迭代,但我已经以最能说明我的问题的方式简化了它,我希望有人可以帮助解决。

本质上,我通过使用带有命令行参数的 regedit.exe 来导入“.reg”文件。我尝试通过使用 ProcessStartInfo() 构建它来做到这一点,但它不起作用。因此,为了测试问题,我创建了一个批处理文件并按如下方式运行它:

    File.WriteAllText("ImportReg.bat", "regedit /s /i MyRegFile.reg");
    Process.Start("ImportReg.bat");

然而,这不起作用。

批处理文件创建成功,REG文件有效。这两个文件与 EXE 位于相同的位置,因此我认为问题不应该在于正在使用的目录。如果我自己从这个位置运行批处理文件,它会成功导入注册表文件。我是我正在测试的机器上的完整管理员。

我也遇到了从注册表导出的问题。注册表的某些部分可以正常导出,而其他部分则不能。但是,如果我将导出设置为像上面的导入那样的批处理文件,那么它每次都可以工作。

有人能帮忙吗?我看不到为什么我的批处理文件有效,但当它通过 Process.Start 运行时却看不到。任何建议将不胜感激。

4

3 回答 3

1

会不会是权限问题?

当您双击它时,Regedit 会自动提升。但是当运行你的程序时,它不是。也许这就是为什么它可以让您导出注册表的某些部分,但不能导出其他部分。

于 2013-09-08T09:05:33.993 回答
0

"regedit /s /i MyRegFile.reg"您可能作为可执行文件名称传递。传球"regedit.exe"和论据"/s /i MyRegFile.reg"

于 2015-02-23T18:24:05.633 回答
0

当程序运行时,即使登录用户是管理员,它也不会以提升的权限运行。 选项 A)更改 Process.Start 以使用“runas”来提升创建的进程

...
using System.Diagnostics;
...

System.Diagnostics.Process proc = new System.Diagnostics.Process();
  proc.StartInfo.FileName        = "C:\\Windows\\system32\\notepad.exe";
  proc.StartInfo.Verb            = "runas"; // Elevate the application
  proc.StartInfo.UseShellExecute = true;
proc.Start();

选项 B)通过添加清单文件来提升权限

http://msdn.microsoft.com/en-us/library/bb384691.aspx

在 Visual Studio 开发环境中设置此链接器选项

  1. 打开项目的属性页对话框。有关详细信息,请参阅如何:打开项目属性页。
  2. 展开配置属性节点。
  3. 展开链接器节点。
  4. 选择清单文件属性页。
  5. 修改启用用户帐户控制 (UAC)、UAC 执行级别和 UAC 绕过 UI 保护属性。

清单文件看起来像这样

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <v3:trustInfo xmlns:v3="urn:schemas-microsoft-com:asm.v3">
        <v3:security>
            <v3:requestedPrivileges>
                <v3:requestedExecutionLevel level="requireAdministrator"/>
            </v3:requestedPrivileges>
        </v3:security>
    </v3:trustInfo>
</assembly>

选项 C),添加以下代码(它使用动词 runas,使用它的参数重新生成程序以提升重复的子进程) Windows 7 和 Vista UAC - 以编程方式请求 C# 中的提升

于 2013-09-23T16:40:09.763 回答