【发布时间】:2013-09-11 23:16:44
【问题描述】:
我正在为我工作的公司创建一个应用程序,它将为我们提供的某些软件备份数据。它可以选择将 SQL 数据库、文件夹、文件和注册密钥添加到备份作业中,然后将其放入 Zip 文件中。还有一些选项可以在需要时恢复备份。
我在注册表备份和还原方面遇到问题。我已经尝试过多次尝试使其正常工作,但我已经以最能说明我的问题的方式对其进行了简化,希望有人能提供帮助。
基本上我是通过使用带有命令行参数的 regedit.exe 来导入“.reg”文件。我尝试通过使用 ProcessStartInfo() 构建它来做到这一点,但它不起作用。因此,为了测试问题,我创建了一个批处理文件并按如下方式运行它:
File.WriteAllText("ImportReg.bat", "regedit /s /i MyRegFile.reg");
Process.Start("ImportReg.bat");
但这不起作用。
批处理文件创建成功,REG文件有效。这两个文件都与 EXE 位于相同的位置,所以我认为问题不应该在于正在使用的目录。如果我自己从这个位置运行批处理文件,它会成功导入注册表文件。我是我正在测试的机器上的完整管理员。
我也遇到了从注册表导出的问题。注册表的某些部分可以正常导出,而其他部分则不能。但是,如果我像上面的导入一样将导出设置为批处理文件,那么它每次都可以工作。
有人可以帮忙吗?我看不到为什么我的批处理文件有效,但当它通过 Process.Start 运行时却看不到。任何建议将不胜感激。
【问题讨论】:
-
您是否验证了进程的退出代码?您可以通过调查 Process 返回的退出代码来弄清楚发生了什么。
-
如果你这样做
Process.Start("regedit.exe", "/s /i MyRegFile.reg");会起作用吗? -
感谢您的回复。从 Process.Start 直接运行 regedit.exe 是我最初开始使用它的方式,但在尝试找到问题时,我开始使用批处理文件来排除引号或反斜杠过多/过少的任何拼写问题。它也不起作用。如果我直接从运行框中使用该命令,它就可以正常工作。
-
退出代码成功返回零。如果我在批处理文件中放了一个暂停,我可以看到命令窗口打开并在关闭之前等待我的输入。
-
当你这样做时,无法诊断的故障太多了。使用 /s 选项当然也无济于事。请改用 .NET RegistryKey 类。
标签: c# windows process.start regedit