最近遇到了一些设置,需要去操作注册表,但是只对注册表自身操作,很多应用或服务是不知情的,面对这种情况,最常见的方法是重启电脑,但是对于一个成熟、稳重、有理想的软件来说,怎么可能允许重启电脑才生效的这种抢矿(没打错)发生!
操作注册表:
命名空间using Microsoft.Win32;
原文:c#操作注册表
我这里只读取跟删除,原文更详细
//读取注册表
private string[] ReadRegedit()
{
string sts = @"SYSTEM\ControlSet001\Control\Print\Printers\";
RegistryKey rsg = Registry.LocalMachine.OpenSubKey(sts, true);
return rsg.GetSubKeyNames();
}
//删除注册表
private void DllCE(string str)
{
string sts = @"SYSTEM\ControlSet001\Control\Print\Printers\" + str;
Registry.LocalMachine.OpenSubKey(sts, true);
Registry.LocalMachine.DeleteSubKeyTree(sts, true);
}
注册表生效
这个较为麻烦,因为注册表包含很多信息,通常是更新组策略,但是有些面板是需要更新服务
更新策略组
string sts = "gpupdate /target:computer /force";
Process pro = new Process();
// 设置命令行、参数
pro.StartInfo.FileName = "cmd.exe";
pro.StartInfo.UseShellExecute = false;
pro.StartInfo.RedirectStandardInput = true;
pro.StartInfo.RedirectStandardOutput = true;
pro.StartInfo.RedirectStandardError = true;
pro.StartInfo.CreateNoWindow = true;
// 启动CMD
pro.Start();
// 运行端口检查命令
pro.StandardInput.WriteLine(sts);
pro.StandardInput.WriteLine("exit");
我用的是cmd,还有重启服务的,我这里是打印服务,对应上面的注册表的修改,如果是别的,就可能要对应别的服务了
//开启服务
private void OpenPrinterSpooler()
{
//开启服务
ProcessStartInfo a = new ProcessStartInfo(@"c:/windows/system32/cmd.exe", "/c net start Spooler");
a.WindowStyle = ProcessWindowStyle.Hidden;
Process process = Process.Start(a);
}
//关闭服务
private void ClosePrinterSpooler()
{
ProcessStartInfo a = new ProcessStartInfo(@"c:/windows/system32/cmd.exe", "/c net stop Spooler");
a.WindowStyle = ProcessWindowStyle.Hidden;
Process process = Process.Start(a);
}
在Windows 8.1专业版64位上测试成功
完毕!