使用 32 位应用程序修改 64 位注册表,反之亦然
Modifying 64-bit registries using 32-bit application or vice versa
我已经在 C# 中看到了此问题的答案,但我使用的 C++ 解决方案对我不起作用。我可以将应用程序设为 64 位,但后来我失去了修改 32 位注册表的机会,所以我想在一个应用程序中修改两个注册表。
现在我发现 32 位在 64 位上工作得更多,所以我会走那条路 - 但如果 64 位访问 32 位更容易让我知道。
我使用以下方法进行初始化:
RegistryKey^ key = Registry::LocalMachine;
然后如下删除注册表值:
if (key->OpenSubKey(PATH)) {
key->DeleteSubKeyTree(PATH);
}
PATH 类似于 SOFTWARE\WOW6432Node\Apple Computer, Inc.\QuickTime
现在,根据 c++ 体系结构是 32 位还是 64 位,我可以删除其中一个。两者都删除很麻烦。
64 位有这样的东西吗:
RegistryKey^ wygRegKey = Microsoft::Win32::Registry::LocalMachine->OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall");
如果有的话,我可以发送 cmd 命令删除注册表,然后检查日志是否存在,但我不想冒丢失错误的风险。
您需要使用 RegistryKey.OpenBaseKey()
为注册表的所需视图(32 位或 64 位)创建一个 RegistryKey
对象。
RegistryKey ^key = RegistryKey::OpenBaseKey(RegistryHive::LocalMachine, RegistryView::Registry32);
// the next call maps to "SOFTWARE\WOW6432Node\Apple Computer" on a 64bit system...
if (key->OpenSubKey("SOFTWARE\Apple Computer, Inc."))
{
key->DeleteSubKeyTree("QuickTime");
key->Close();
}
string path = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
RegistryKey^ key;
key = RegistryKey::OpenBaseKey(RegistryHive::LocalMachine, RegistryView::Registry32);
key->DeleteSubKeyTree(path);
key = RegistryKey::OpenBaseKey(RegistryHive::LocalMachine, RegistryView::Registry64);
key->DeleteSubKeyTree(path);
我已经在 C# 中看到了此问题的答案,但我使用的 C++ 解决方案对我不起作用。我可以将应用程序设为 64 位,但后来我失去了修改 32 位注册表的机会,所以我想在一个应用程序中修改两个注册表。
现在我发现 32 位在 64 位上工作得更多,所以我会走那条路 - 但如果 64 位访问 32 位更容易让我知道。
我使用以下方法进行初始化:
RegistryKey^ key = Registry::LocalMachine;
然后如下删除注册表值:
if (key->OpenSubKey(PATH)) {
key->DeleteSubKeyTree(PATH);
}
PATH 类似于 SOFTWARE\WOW6432Node\Apple Computer, Inc.\QuickTime
现在,根据 c++ 体系结构是 32 位还是 64 位,我可以删除其中一个。两者都删除很麻烦。
64 位有这样的东西吗:
RegistryKey^ wygRegKey = Microsoft::Win32::Registry::LocalMachine->OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall");
如果有的话,我可以发送 cmd 命令删除注册表,然后检查日志是否存在,但我不想冒丢失错误的风险。
您需要使用 RegistryKey.OpenBaseKey()
为注册表的所需视图(32 位或 64 位)创建一个 RegistryKey
对象。
RegistryKey ^key = RegistryKey::OpenBaseKey(RegistryHive::LocalMachine, RegistryView::Registry32);
// the next call maps to "SOFTWARE\WOW6432Node\Apple Computer" on a 64bit system...
if (key->OpenSubKey("SOFTWARE\Apple Computer, Inc."))
{
key->DeleteSubKeyTree("QuickTime");
key->Close();
}
string path = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
RegistryKey^ key;
key = RegistryKey::OpenBaseKey(RegistryHive::LocalMachine, RegistryView::Registry32);
key->DeleteSubKeyTree(path);
key = RegistryKey::OpenBaseKey(RegistryHive::LocalMachine, RegistryView::Registry64);
key->DeleteSubKeyTree(path);