2015-03-15 3 views
1

Я хочу удалить деинсталлятор, который должен удалить раздел реестра из HKEY_LOCAL_MACHINE. Проблема в том, что каждый раз, когда я пытаюсь удалить местоположение, получаю LASTERROR 2, что обычно является неправильным именем.Удалить ключ из реестра HKEY_LOCAL_MACHINE

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# не было никаких особых привилегий и работы).

ОС: Windows 7, 64 бит.

У вас есть идея, что происходит?

+0

Какая ОС вы используете и как скомпилируете программу 'C++'? – user0815

+0

@ user0815 windows 7 64 – tonni

ответ

2

В 64-битной Windows есть два разделенных дерева реестров. Один для 32-битных приложений, а другой для 64-битных. Это зависит от вашего приложения (32-битное и 64-битное), которое используется при вызове SHDeleteKey, и поэтому он может работать с c#, но не с c++.

Вы можете использовать RegDeleteKeyEx, чтобы явно определить дерево, к которому вы хотите получить доступ.

+0

Thxn man :) вы экономите мой день !!!! (long laster = RegDeleteKeyEx (hKey, L "Software \\ Microsoft \\ Windows \\ CurrentVersion \\ Uninstall \\ NameOfApp \\", KEY_WOW64_64KEY, 0);) – tonni

Смежные вопросы