1

我在 C# 中创建了一个注册表文件来配置客户电子邮件帐户。然后我创建了一个进程,然后开始执行 reg 文件,如下所示:

  var proc = new Process();
                var pi = new ProcessStartInfo();
                pi.UseShellExecute = true;
                pi.FileName = strRegPath;
                proc.StartInfo = pi;

                proc.Start();

这工作正常,但是它需要使用通过单击是来与注册表文件的导入进行交互。无论如何我可以在后台运行它而不与用户交互吗?

4

1 回答 1

3

REGEDIT.EXE 有一个/s 选项,它抑制对话框。

因此,您将 pi.FileName 更改为 regedit.exe

并添加 pi.Arguments = "/s " + strRegPath

而且您现在不需要 pi.UseShellExecute 因为您没有使用将文件扩展名链接到可执行文件的 shell 表来打开它们。

编辑:事实上,你甚至不需要 ProcessStartInfo,你可以这样做

System.Diagnostics.Process.Start("regedit.exe", "/s \""+strRegPath+"\"");

编辑:用户访问控制(UAC)

但是,除非您使用某种第 3 方 reg 文件,否则最好使用 Microsoft.Win32.Registry 类更改注册表项。

启动 regedit 时会弹出 UAC,因为它可以更改需要提升的 HKEY_LOCAL_MACHINE 中的值。但是,我原以为所有客户电子邮件帐户设置都在 HKEY_CURRENT_USER 下。可以使用 Registry 类访问 HKEY_CURRENT_USER 下面的子项,而无需提升,因此不会创建任何 UAC 弹出窗口,还允许非管理员登录使用该脚本。这可能是比尝试使用 .reg 文件更好的方法。

于 2013-09-20T20:22:38.007 回答