HKEY_LOCAL_MACHINE 中的 C# 读取或编辑 windows 注册表值问题
C# Reading or Editing a windows registry value issue in HKEY_LOCAL_MACHINE
我是 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");
}
我是 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");
}