c# - C# 在 HKEY_LOCAL_MACHINE 中读取或编辑 Windows 注册表值问题
问题描述
我是 C# 的新手,我想制作一个程序来更改 HKEY_LOCAL_MACHINE 中的一些注册表项,更具体地说是 Windows 版本(出于兼容性原因),为此有两个地方需要更改:1- HKEY_LOCAL_MACHINE\ SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion 2- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
我设法对第一个进行了读取和写入..但是每当我尝试对第二个进行读取或写入时,它都不会读取。我将附上问题所在的图片:
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion工作正常
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion无法读取或写入
这是代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Win32;
namespace Registry_Modifier_alpha
{
public partial class Form1 : Form
{
static RegistryKey BaseFolderPath = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion");
static RegistryKey FolderPath2 = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion");
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
textBox1.Text = BaseFolderPath.GetValue("CompositionEditionID").ToString();
textBox2.Text = BaseFolderPath.GetValue("ProductName").ToString();
textBox3.Text = BaseFolderPath.GetValue("EditionID").ToString();
textBox4.Text = FolderPath2.GetValue("CompositionEditionID").ToString();
textBox5.Text = FolderPath2.GetValue("ProductName").ToString();
textBox6.Text = FolderPath2.GetValue("EditionID").ToString();
}
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
System.Diagnostics.Process.Start("mailto:mail@mail.com");
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
RegistryKey BaseFolderPath = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion", true);
BaseFolderPath.SetValue("ProductName", "Windows 10 Pro");
BaseFolderPath.SetValue("CompositionEditionID", "Pro");
BaseFolderPath.SetValue("EditionID", "Pro");
BaseFolderPath.Close();
RegistryKey FolderPath2 = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion", true);
FolderPath2.SetValue("ProductName", "Windows 10 Pro");
FolderPath2.SetValue("CompositionEditionID", "Pro");
FolderPath2.SetValue("EditionID", "Pro");
FolderPath2.Close();
}
private void label2_Click(object sender, EventArgs e)
{
}
private void toolStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
}
private void toolTip1_Popup(object sender, PopupEventArgs e)
{
}
private void textBox3_TextChanged(object sender, EventArgs e)
{
}
private void toolTip2_Popup(object sender, PopupEventArgs e)
{
}
private void textBox5_TextChanged(object sender, EventArgs e)
{
}
private void textBox6_TextChanged(object sender, EventArgs e)
{
}
private void textBox4_TextChanged(object sender, EventArgs e)
{
}
}
}
我不知道为什么它没有读取 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
谢谢你
解决方案
只需根据不同的注册表视图打开BaseKey:
var registryView32 = RegistryView.Registry32;
var registryView64 = RegistryView.Registry64;
var key32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, registryView32);
var key64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, registryView64);
var folder32 = key32.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion");
var folder64 = key64.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion");
更新:
根据您的评论,您可以将其添加到代码中:static RegistryKey BaseFolderPath;
static RegistryKey FolderPath2;
public Form1()
{
InitializeComponent();
var registryView32 = RegistryView.Registry32;
var registryView64 = RegistryView.Registry64;
var key32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, registryView32);
var key64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, registryView64);
BaseFolderPath = key32.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion");
FolderPath2 = key64.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion");
}
推荐阅读
- forms - 签名板发送空
- java - 如何验证下拉列表并将它们保存在数据库中,并且代码不显示错误
- reactjs - 使用 Material UI Components 的酶单元测试 onChange 方法
- sql - 如何序列化为json数组?
- windows - 如何将 ssh 设置到我的计算机的 github?
- python - 有没有办法在 python 中生成不同的对象实例?
- sql-server - .NET Code First 将用户登录添加为默认表架构
- javascript - 如何等待 load() 完成并在选择器中获取变量
- git - 如何在 GitLab 11.11 版中配置全局 git 挂钩?
- javascript - Thingsboard,从小部件的 javascript 访问服务器端属性