Como instalar programa en C

Iniciado por Hacklinx, 4 Febrero 2014, 19:48 PM

0 Miembros y 1 Visitante están viendo este tema.

Hacklinx

Saludos a todos, abro este post ya que estoy creando un programa capaz de instalarse por si solo es decir que al ejecutarle se copie en un directorio que no requiera permisos de root, y allí realizar un anclaje al registro para esa dirección que tampoco requiere permisos de root.

Una vez echo esto, el programa se ejecutará cuando yo encienda el ordenador, y podré usarlo como cualquier otro.

Esto es lo que tengo: (Es C)

char cad[100]="copy ";
char path[100];
getcwd(path,255);
strcat(cad,path);
strcat(cad,"\\miprograma.exe C:\\Users\\minombreusuario");
system(cad);
//Luego lo anclaría al registro...

Vamos a ver, eso funcionaria en mi ordenador, ya que conozco mi nombre de usuario y sería solo ponerlo en "minombredeusuario", pero entonces el programa ya no funcionará para otra persona, yo quiero que sea capaz de instalarse sea el ordenador que sea.

Lo estoy "instalando" en C:\Users\Usuario\

Es decir este archivo.exe se copiaría allí y se anclaría al registro con esa dirección, pero ¿como hacer para que funcione para cualquier usuario?

O ¿Como poderlo copiar de alguna manera para poderlo instalar?

Cualquier idea será bienvenida, aunque sea totalmente distinta a la mía, lo necesito cuanto antes :))

Saludos, y gracias :))

Yoel Alejandro

#1
Hola Hacklink,

Me parece excelente la iniciativa de crear un programa auto-instalable. Ahora, no entiendo bien si me dices cuando hablas de "root" (lo que me hace pensar en UNIX), y por otra parte das a entender que lo instalarás en Windows (por la extensión .exe por ejemplo). En Windows no existe usuario root, por lo que no tienes que preocuparte por ese problema.

En cuanto a conocer el nombre particular del usuario, en los Sistemas Operativos existe algo llamado "variables de entorno". Son como nombres nombres simbólicos que se "expanden" o reemplazan por el procesador de comandos (el símbolo de sistema de Windows) por el valor apropiado. Para ver una lista de todas las variables de entorno en Windows escribe el comando "set" en la cónsola.

El nombre que identifica al usuario actual si mal no recuerdo (revisa, porque podría estar recordando mal) es USERNAME . Para obtener si valor debes escribir entre signos de porcentaje así:


echo %USERNAME%


y te debe imprimir (en la consola) el nombre de usuario actual. Entonces, para C deberías recuperar el valor de esta variable mediante una solicitud al SO con el comando system. Debe ser algo más o menos como:

;
char username[100];

char cad[100]="copy ";
char path[100];
getcwd(path,255);
strcat(cad,path);

/* aquí pones el nombre el usuario */
strcpy( username, system("echo %USERNAME%") );
strcat(cad,"\\miprograma.exe C:\\Users\\%s", username);

/* luego ejecutas el copy */
system(cad);


Bueno, espero haber aclarado tu duda, y cualquier cosa comenta o pregunta :)

Por cierto, ¿sabes lo que son scripts de batch para Windows? Se utilizan para automatizar tareas que requieren del SO, y en mi opinión creo que son preferibles a códigos de C porque pueden llamar a órdenes directas de la consola de comandos ....

===============
P.D. Por favor coméntame sobre tu avance en este proyecto que me parece muy interesante ...
Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)

rir3760

No es posible utilizar la función system porque el valor de retorno de esta es de tipo int.

En MS Windows para obtener el nombre de usuario se pueden utilizar las funciones GetUserName y  GetUserNameEx.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Hacklinx

Encontré finalmente el método y aquí le traigo:

system("mkdir Aplicaciones C:\\Users\\%username%");
system("copy programa.exe C:\\Users\\%username%\\Aplicaciones");
system("REG ADD HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run /v IniciarProgramas /t REG_SZ /d \"C:\\Users\\%username%\\Aplicaciones\\programa.exe\"");

Crea una carpeta llamada aplicaciones, dentro de tu perfil de usuario, y allí mete el ejecutable, y lo ancla al registro para esa dirección.

Saludos :)