如何在不使用 C++ 中的 RegDeleteKeyEx 的情况下在 64 位树中删除 Windows x64 中的注册表项?

Posted

技术标签:

【中文标题】如何在不使用 C++ 中的 RegDeleteKeyEx 的情况下在 64 位树中删除 Windows x64 中的注册表项?【英文标题】:How do I delete a registry entry in Windows x64 in the 64 bit tree without using RegDeleteKeyEx in C++? 【发布时间】:2009-09-25 11:21:20 【问题描述】:

我正在开发一个 32 安装程序,它必须在 Win XP 以上的环境中运行。我们有一个问题,我们必须在 Windows 2k3 x64 下删除注册表的 x64 部分上的注册表项。

使用 RegDeleteKeyEx 很容易,但我无法分发可能调用该函数的可执行文件,因为它无法在 Windows XP 上运行。我可以很容易地获得密钥的句柄,我只是看不出我应该如何删除它。

我不能使用 RegDeleteKey,因为注册表重定向会阻碍我在 x64 平台上的工作。我很生气,我不能只将一个句柄传递给我的密钥,以及一个空/空子密钥字符串。我不敢相信这个 API 这么坏。我错过了什么吗?

我目前唯一的想法是调用一个注册表文件或一个单独的可执行文件来为我完成这项工作,但这实在是太难看了,而且只会让一个糟糕的解决方法变得更糟。有没有更好的办法?

【问题讨论】:

【参考方案1】:

在您确定系统是 x64 系统后,为什么不在运行时解析 RegDeleteKeyEx(使用 LoadLibraryGetModuleHandle 或类似的和 GetProcAddress)?

【讨论】:

以上是关于如何在不使用 C++ 中的 RegDeleteKeyEx 的情况下在 64 位树中删除 Windows x64 中的注册表项?的主要内容,如果未能解决你的问题,请参考以下文章

我应该如何在不使用 C++ 中的构造函数的情况下将值(不是指针)转换为子类?

如何在不使用 C++ 中的 RegDeleteKeyEx 的情况下在 64 位树中删除 Windows x64 中的注册表项?

如何在不循环的情况下将数组的内容复制到 C++ 中的 std::vector?

如何在不通过 COM 的情况下从 VB6 调用 C++ DLL?

C++ 中的除法舍入

如何在不使用 OpenCV 中的内置函数翻转的情况下进行翻转?