Estoy tratando de crear una nueva clave de registro en el registro de Windows usando C++. Aquí está el código que tengo hasta ahora:Crear una nueva clave de registro de Windows usando C++
HKEY hKey;
LPCTSTR sk = TEXT("SOFTWARE\\OtherTestSoftware");
LONG openRes = RegCreateKeyEx(
HKEY_LOCAL_MACHINE,
sk,
0,
NULL,
REG_OPTION_BACKUP_RESTORE,
KEY_ALL_ACCESS,
NULL,
&hKey,
NULL);
if (openRes==ERROR_SUCCESS) {
printf("Success creating key.");
} else {
printf("Error creating key.");
}
LPCTSTR value = TEXT("OtherTestSoftwareKey");
LPCTSTR data = "OtherTestData\0";
LONG setRes = RegSetValueEx (hKey, value, 0, REG_SZ, (LPBYTE)data, strlen(data)+1);
if (setRes == ERROR_SUCCESS) {
printf("Success writing to Registry.");
} else {
printf("Error writing to Registry.");
}
//RegDeleteKey(hKey, sk);
LONG closeOut = RegCloseKey(hKey);
if (closeOut == ERROR_SUCCESS) {
printf("Success closing key.");
} else {
printf("Error closing key.");
}
soy capaz de abrir correctamente una clave existente utilizando un fragmento de código muy similar (básicamente reemplazar RegCreateKeyEx con RegOpenKeyEx). Me imagino que uno o más de los argumentos que estoy pasando a RegCreateKeyEx está causando el problema. Honestamente, no estoy seguro de dónde se van a ensuciar las cosas, ya que todos los códigos de error que he atrapado muestran el éxito. Como referencia, aquí está la firma de función para RegCreateKeyEx:
/*
* LONG WINAPI RegCreateKeyEx(
__in HKEY hKey,
__in LPCTSTR lpSubKey,
__reserved DWORD Reserved,
__in_opt LPTSTR lpClass,
__in DWORD dwOptions,
__in REGSAM samDesired,
__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes,
__out PHKEY phkResult,
__out_opt LPDWORD lpdwDisposition
);
*/
¡Cualquier idea sería genial!
gracias, Brian
Dónde exactamente está ocurriendo su error (supongo que en la llamada RegCreateKeyEx(), pero no deberíamos tener que adivinar), y ¿qué devuelve GetLastError()? –
¿Tiene la intención de intentar eliminar la clave que acaba de crear? –
En lugar de REG_OPTION_BACKUP_RESTORE, debe pasar REG_OPTION_NON_VOLATILE (= 0). Puede consultar el comportamiento de tales opciones desde MSDN http://msdn.microsoft.com/en-us/library/ms724844(VS.85).aspx – Ismael