| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Lun 06 May, 2019 8:51 pm Asunto: Error al escribir registro |
|
|
Hola, tengo el siguiente código: | Código: | switch (inicio) {
case 0:{
TRegistry *registro = new TRegistry;
registro->RootKey = HKEY_LOCAL_MACHINE;
registro->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", false);
if (!registro->ValueExists(ExtractFileName(Application->ExeName)) ) {
registro->WriteString(ExtractFileName(Application->ExeName),Application->ExeName); //Aquí da el fallo
}
registro->CloseKey();
delete registro;
break;
}
case 1:{
TRegistry *registro = new TRegistry;
registro->RootKey = HKEY_LOCAL_MACHINE;
registro->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", false);
if (registro->ValueExists(ExtractFileName(Application->ExeName)) ) {
registro->DeleteValue(ExtractFileName(Application->ExeName));
}
registro->CloseKey();
delete registro;
break;
}
} |
El writestring me falla, me da error diciendo failed to set data for recordatori.exe y no se que hacer.
inicio es una variable booleana que compruebo al inicio del programa desde un archivo ini. _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Mie 08 May, 2019 11:53 am Asunto: |
|
|
Es un problema de permisos de escritura en esa clave del registro. Si lo ejecutas como administrador no tendrá ese error.
Saludos. |
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Mie 08 May, 2019 1:50 pm Asunto: |
|
|
Muchas gracias por responder, ahora sólo me queda saber como ejecuto el registro como administrador desde código, tal vez con ShellExecute? _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Mie 08 May, 2019 11:00 pm Asunto: |
|
|
Tienes la opción de usar la clave HKEY_CURRENT_USER en la que podrás escribir sin problemas. Si precisas usar privilegios de administrador la aplicación debe ejecutarse de esa forma. Una solución puede ser usar otra app encargada de escribir el el registro que corra como administrador y se ejecute desde la app principal. Para ello puedes usar este código:
| Código: |
void RunAsAdmin(char *ProgramName, char *Parameters = 0, HWND hWnd = 0)
{
SHELLEXECUTEINFOA Info = {0};
if(*ProgramName == 0) return;
Info.cbSize = sizeof(Info);
Info.hwnd = hWnd;
Info.fMask = SEE_MASK_FLAG_DDEWAIT | SEE_MASK_FLAG_NO_UI;
Info.lpVerb = "runas"; // Eleva los privilegios de ejecución a Administrador
Info.lpFile = ProgramName;
Info.lpParameters = Parameters;
Info.nShow = SW_SHOWNORMAL;
ShellExecuteExA(&Info);
}
|
Si te interesa el tema de elevar privilegios o ejecutar como otro usuario puedes visitar este enlace: Ejecutar Como en C++
Saludos. |
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Jue 09 May, 2019 5:49 pm Asunto: |
|
|
Muchas gracias escasfandra, al final he optado por escribir en la clave HKEY_CURRENT_USER y todo a ido bien, lo demás no alcanzo a entenderlo.  _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
|