从注册表中删除密钥 HKEY_LOCAL_MACHINE
Delete key from registry HKEY_LOCAL_MACHINE
我想制作应该从 HKEY_LOCAL_MACHINE
中删除注册表项的卸载程序。问题是每次我尝试删除位置时都会得到 LASTERROR 2
,这通常是错误的名称。
HKEY hKey = HKEY_LOCAL_MACHINE;
LSTATUS deletes = SHDeleteKey(hKey, L"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NameOfApp\");
if (deletes == ERROR_SUCCESS)
{
return true;
}
我在 C# 中有相同的代码可以工作,但 C++ 不行。也尝试以管理员身份,仍然没有(C# 没有设置任何特殊权限和工作)。
OS: Windows 7, 64 位。
你知道发生了什么事吗?
在 64 位 Windows 上有两个独立的注册表树。一个用于 32 位应用程序,另一个用于 64 位应用程序。这取决于您的应用程序(32 位与 64 位)在调用 SHDeleteKey
时使用哪个树,这可能就是它使用 c#
但不使用 c++
的原因。
您可以使用 RegDeleteKeyEx 明确定义您要访问的树。
我想制作应该从 HKEY_LOCAL_MACHINE
中删除注册表项的卸载程序。问题是每次我尝试删除位置时都会得到 LASTERROR 2
,这通常是错误的名称。
HKEY hKey = HKEY_LOCAL_MACHINE;
LSTATUS deletes = SHDeleteKey(hKey, L"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NameOfApp\");
if (deletes == ERROR_SUCCESS)
{
return true;
}
我在 C# 中有相同的代码可以工作,但 C++ 不行。也尝试以管理员身份,仍然没有(C# 没有设置任何特殊权限和工作)。
OS: Windows 7, 64 位。
你知道发生了什么事吗?
在 64 位 Windows 上有两个独立的注册表树。一个用于 32 位应用程序,另一个用于 64 位应用程序。这取决于您的应用程序(32 位与 64 位)在调用 SHDeleteKey
时使用哪个树,这可能就是它使用 c#
但不使用 c++
的原因。
您可以使用 RegDeleteKeyEx 明确定义您要访问的树。