Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中通过用户交互运行注册表文件#_C#_Windows_Process_Registry_Regedit - Fatal编程技术网

C# 如何在C中通过用户交互运行注册表文件#

C# 如何在C中通过用户交互运行注册表文件#,c#,windows,process,registry,regedit,C#,Windows,Process,Registry,Regedit,我在C#中创建了一个注册表文件,用于配置客户端电子邮件帐户。然后我创建了一个进程,然后开始执行reg文件,如下所示: var proc = new Process(); var pi = new ProcessStartInfo(); pi.UseShellExecute = true; pi.FileName = strRegPath; proc.StartInf

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

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

                proc.Start();

这很好,但是需要通过单击yes与regustry文件的导入进行交互。我是否可以在后台运行此程序,而无需与用户交互

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

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

并添加pi.Arguments=“/s”+stregpath

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

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

System.Diagnostics.Process.Start("regedit.exe", "/s \""+strRegPath+"\"");
编辑:用户访问控制(UAC)

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


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

为什么要使用注册表文件(.reg?)?您可以使用.net方法从注册表进行读/写。@ilansch您可以更具描述性一点吗?这有点毫无意义。为什么不调用MessageBox.Show()呢?只有在获得DialogResult.Yes时才调用Start()。当然,用户不知道他的注册表会发生什么,所以不要羞于谈论它。如果不这样做,您将始终得到“否”。我尝试添加了add pi.Arguments=“/s”+stregpath,但对话框仍然会弹出,询问我是否要运行reg文件是的,我将pi.FileName更改为reedit.exe。我还删除了所有ProcessStartInfo,并使用了proc.Start(“regedit.exe”、“/s\”“+stregpath+”);它仍然不起作用。我不确定这是否重要,但我正在使用Windows 8,我可能误解了。。。单击“是”回答什么问题?是UAC弹出的带有注册表编辑器图标的窗口标题“用户帐户控制”或“注册表编辑器”。“用户帐户控制”是窗口的标题。我给出的解决方案是去掉标题为“注册表编辑器”的窗口。要停止“UAC”窗口,您需要搜索有关它的问题,StackOverflow上已经有很多了。在您摆脱UAC之后,您还需要我的解决方案使regedit保持静默,以便在不更新注册表的情况下进程不会暂停。但是,如果要设置的所有注册表设置都在HKEY_CURRENT_USER中,则可以使用registry类进行更改,而无需提升。