• [Duda] Anclaje al Registro con la Winapi

 #492399  por Al-Sah her
 07 Ago 2017, 09:05
Hola, antes de nada gracias por la atención,
Me encuentro diseñando una función que permite a un programa anclarse al registro de windows utilizando la winapi, la cual facilita realmente la programación, en cuanto a windows se trata, del desarrollo en C. SIguiendo las explicaciones de las guías de la api, conseguí anclar mi programa al resgistro, quedando así:

"
const int _MaxDir=50;
const char _regDir[]="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
const char _RegValueName[]="winsrv";

/*Function to Add to Reg*/
void _SetToReg(){

FILE *_lg;
char _path[_MaxDir];
HMODULE _retrv;
int _regOpen, _regKey, _regTrue;
HKEY _hkey;

_retrv = GetModuleHandle(NULL);

if(GetModuleFileName(_retrv,_path,_MaxDir) == 0){
_lg = fopen("_private.log","a+");
fprintf(_lg, "\n[!]Failed getting path");
fclose(_lg);
}else{
_lg = fopen("_private.log","a+");
fprintf(_lg, "\n[^]Path:%s",_path);
fclose(_lg);
}


_regOpen = RegOpenKey(HKEY_LOCAL_MACHINE,_regDir,&_hkey);

/*Is Added to Reg?*/
if(_regOpen == 1){
_lg = fopen("_private.log","a+");
fprintf(_lg, "\n[!]Program is added to Reg");
fclose(_lg);
}else{
_regKey = RegCreateKey(HKEY_LOCAL_MACHINE,_regDir,&_hkey);

/*Can we create RegKey?*/
if(_regKey == 0){
_regTrue = RegSetValueEx((HKEY)_hkey,_RegValueName,0,REG_SZ,(BYTE*)_path,strlen(_path));
RegCloseKey(_hkey);

/*RegKey created Successfully*/
if(_regTrue == 0){
_lg = fopen("_private.log","a+");
fprintf(_lg, "\n
[*]Program now set in Reg!");
fclose(_lg);
}else{
_lg = fopen("_private.log","a+");
fprintf(_lg, "\n[!]No added to Reg");
fclose(_lg);
}

}else{
_lg = fopen("_private.log","a+");
fprintf(_lg, "\n[!]RegKey didn't created");
fclose(_lg);
}
}
}[/b][/i]
"

Entonces, es cuando probé si estaba todo correcto, y... en principio si, porque se ancló correctamente, pude comprobarlo con el regedit. Pero, cuando reiniciaba el ordenador, y miraba los procesos, salía en ejecución, pero no llegaba a operar correctamente, es decir, el programa genera una serie de archivos (obligatoriamente) ya sean de errores o no. Pues a la hora de ejecutarse después del reinicio, no funciona correctamente.

He estado buscando la solución pero no he dado con ella, esto me lleva a preguntarles. He pensado en la posibilidad de que la ejecución no sea la misma al llamarla en el inicio, pero no se muy bien como solucionarlo. Un compañero me dijo que probara con un .ini, pero después de investigar un poco, no me parece la solución.

Espero que puedan echarme un cable, un saludo y gracias de antemano!