Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[c] esecuzione automatica

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Triumph Of Steel, archimede

[c] esecuzione automatica

Postdi R4Z0R » 18/01/08 17:12

ciao devo fare una funzione che mette in esecuzione automatica il programma
io ho provato a fare cosi:
Codice: Seleziona tutto
       char nom_prog[]="th.exe";
          char moved[255];
          GetSystemDirectory(key_dir, sizeof(key_dir));
          sprintf(moved,"%s\\th.exe",key_dir);
          CopyFile("scuola.exe", moved, 1);
         
          CopyFile(nom_prog, moved, 1);
          HKEY chiave;  // Mofifico le chiavi di registro (run) in modo che parta all'avvio
              RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_SET_VALUE,&chiave);
          RegSetValueEx(chiave, "th",0,REG_SZ,(const unsigned char*)moved,sizeof(moved));
          RegCloseKey(chiave);

la chiave viene creata ma il programma non viene copiato in system32 e quindi all'riavvio non viene eseguito.
R4Z0R
Newbie
 
Post: 4
Iscritto il: 12/01/08 23:05

Sponsor
 

Re: [c] esecuzione automatica

Postdi BianConiglio » 19/01/08 11:20

copialo da qualche altra parte.. sei sicuro di avere le dovute permissioni sulla cartella system32?
BianConiglio
Utente Senior
 
Post: 4710
Iscritto il: 26/12/01 01:00
Località: Varese / Lugano

Re: [c] esecuzione automatica

Postdi R4Z0R » 20/01/08 14:00

l'ho copiato in documenti e funziona :d
grazie
R4Z0R
Newbie
 
Post: 4
Iscritto il: 12/01/08 23:05

Re: [c] esecuzione automatica

Postdi zello » 21/01/08 13:11

Hai già risolto. Tuttavia:
Codice: Seleziona tutto
char nom_prog[]="th.exe";
          char moved[255];
          GetSystemDirectory(key_dir, sizeof(key_dir));
          sprintf(moved,"%s\\th.exe",key_dir);

- il primo non lo modifichi, va bene anche dichiararlo const char* nome_prog="th.exe";
- se la system directory è più lunga di 248 caratteri sei nei guai.
Codice: Seleziona tutto
CopyFile("scuola.exe", moved, 1);
CopyFile(nom_prog, moved, 1);

Il terzo parametro di CopyFile dice se fallire nel caso il file di destinazione esiste già. In questo caso, o fallisce la prima (scuola.exe non esiste), o fallisce la seconda (ha già copiato il file, il file di destinazione esiste), oppure falliscono entrambe. Non so se sia voluto, ma sarebbe meglio controllare gli errori.
Codice: Seleziona tutto
RegSetValueEx(chiave, "th",0,REG_SZ,(const unsigned char*)moved,sizeof(moved));

sizeof(moved) è 255, mentre ti basta copiare la stringa e lo zero terminatore. Sostituisci con strlen(moved)+1, eviti di "sporcare" il registry con bytes inutili.

Nota finale: perché non usi mai le macro dei tipi di windows? 1 è normalmente TRUE, mentre const unsigned char* è const BYTE*. Ci perdi in portabilità (a parte che con due typedef vai a posto), ma ci guadagni in leggibilità.
Il faut être toujours ivre. Tout est là : c'est l'unique question. Pour ne pas sentir l'horrible fardeau du Temps qui brise vos épaules et vous penche vers la terre,il faut vous enivrer sans trêve...
Avatar utente
zello
Moderatore
 
Post: 2351
Iscritto il: 06/05/02 13:44


Torna a Programmazione


Topic correlati a "[c] esecuzione automatica":


Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite