Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Error al escribir registro

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Error al escribir registro Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Es un problema de permisos de escritura en esa clave del registro. Si lo ejecutas como administrador no tendrá ese error.

Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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. Very Happy
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.