PDA

Visualizza la versione completa : [C++] Crea chiave di registro


Multivelox
27-12-2012, 13:20
Salve, ieri stavo provando a far avviare all'avvio un semplice programma che mi stampa helloworld, giusto per vedere come si fa.. e ci sono vari modi da quello che ho capito.. uno tra questi usare direttamente i comandi dos dal programma con la system come nel mio caso:

system("REG ADD HKLM\\Software\\Microsoft\\Windows\\CurrentVersion \\Run /V NUOVO_VALORE_STRINGA /T REG_SZ /F /D C:\\Users\\nomepc\\Desktop\\hello.exe");

effettivamente dovrebbe creare una nuova chiave di registro dentro Run col nome: NUOVO_VALORE_STRINGA e indicando il valore della chiave come il percorso: C:\\Users\\nomepc\\Desktop\\hello.exe ... tutto questo dovrebbe andare.. ma mentre avvio il programma mi stampa:

Errore: Accesso negato.

Come mai? Eppure sono amministratore... uso win 7, e come compilatore dev c++
Ps: ho provato anche a eseguire questo comando (ovviamente senza i doppi slash) direttamente sul cmd, ma mi da lo stesso messaggio... sapreste dirmi come mai? o.O
Oppure un'altra via per creare una chiave di registro e far partire un maledetto helloworld all'avvio?? :) grazie in anticipo!

MItaly
27-12-2012, 15:00
Anche se sei amministratore probabilmente hai l'UAC attivo, per cui devi esplicitamente avviare il programma con privilegi amministrativi.
In ogni caso, per creare chiavi di registro in C normalmente si usano le apposite API di Windows.

Multivelox
29-12-2012, 22:21
Originariamente inviato da MItaly
Anche se sei amministratore probabilmente hai l'UAC attivo, per cui devi esplicitamente avviare il programma con privilegi amministrativi.
In ogni caso, per creare chiavi di registro in C normalmente si usano le apposite API di Windows.


Ma allora mi sapresti spiegare perch anche dalla normale shell di windows mi da lo stesso identico Avviso? Come posso creare una benedetta chiave di registro...? non so dove sbattere la testa..

Grazie in anticipo!

YuYevon
29-12-2012, 22:30
Se devi modificare il registro, non necessariamente da codice, la cosa migliore da fare ovviamente ricorrere all'editor apposito: regedit.exe. Avvialo come amministratore (anche cmd.exe va avviato con i privilegi di amministratore se vuoi eseguire certe operazioni sul registro).

Multivelox
30-12-2012, 18:38
Originariamente inviato da YuYevon
Se devi modificare il registro, non necessariamente da codice, la cosa migliore da fare ovviamente ricorrere all'editor apposito: regedit.exe. Avvialo come amministratore (anche cmd.exe va avviato con i privilegi di amministratore se vuoi eseguire certe operazioni sul registro).

Quindi per creare una chiave di registro in modo che si possa avviare un programma all'avvio del SO, possibile solo se si apre il programma in c.exe con privilegi di amministrazione (in win 7 col tasto destro..) ?

Pensavo bastava aprire il programma tramite l'amministratore del pc, senza ricorrere al tasto destro in win 7, basta che comunque l'utente che apre il programma amministratore..e invece no

Multivelox
30-12-2012, 18:44
Originariamente inviato da YuYevon
Se devi modificare il registro, non necessariamente da codice, la cosa migliore da fare ovviamente ricorrere all'editor apposito: regedit.exe. Avvialo come amministratore (anche cmd.exe va avviato con i privilegi di amministratore se vuoi eseguire certe operazioni sul registro).

Beh si ovvio... ma nel caso volessi fare tutto nel programma in c senza scomodare un utente ad entrare in regedit e crearsela manualmente?
Non bastava avviare il programma da amministratore per far funzionare il tutto? perch c' bisogno del tasto destro per avviare con i permessi di amministratore un programma nonostante l'utente gi un amministratore? E' l'unico modo per riuscire a creare una chiave di registro?

MItaly
31-12-2012, 15:15
Originariamente inviato da Multivelox
Non bastava avviare il programma da amministratore per far funzionare il tutto? perch c' bisogno del tasto destro per avviare con i permessi di amministratore un programma nonostante l'utente gi un amministratore?
Da Windows Vista in poi un utente amministratore di base non lo se non conferma esplicitamente di voler "mettere il cappello da amministratore", il che dal punto di vista della sicurezza un'ottima cosa. Puoi comunque aggiungere al manifest del tuo eseguibile la richiesta a Windows di lanciare di default il tuo eseguibile come amministratore, il che far s che, quando viene lanciato il tuo programma, automaticamente venga fuori la richiesta di conferma di concessione di privilegi.

E' l'unico modo per riuscire a creare una chiave di registro?
No, l'unico modo se vuoi creare una chiave in una posizione privilegiata come HKLM. normale che servano i privilegi di amministratore per scrivere sotto HKLM dato che contiene impostazioni che influenzano tutto il computer (e quindi tutti gli utenti); se ti limiti ad una modifica per l'utente corrente (e quindi scritta sotto HKCU) non ovviamente richiesto alcun privilegio particolare.

Multivelox
31-12-2012, 17:20
Puoi comunque aggiungere al manifest del tuo eseguibile la richiesta a Windows di lanciare di default il tuo eseguibile come amministratore, il che far s che, quando viene lanciato il tuo programma, automaticamente venga fuori la richiesta di conferma di concessione di privilegi.

Quindi possibile inserire una linea di codice che fa si che l'eseguibile sia aperto gi con privilegi di amministrazione? Benissimo! Quale libreria utilizzare? :)
O se ho capito male, cosa bisogna modificare del manifest del mio eseguibile ?
Ps: M'interessa solo avviare il programma con privilegi di admin, perch effettivamente ho notato che mi fa funzionare la system ..
grazie ancora!

MItaly
31-12-2012, 17:31
http://www.codeproject.com/Articles/17968/Making-Your-Application-UAC-Aware

... ma di nuovo, sei sicuro che non abbia pi senso inserire quel valore sotto HKCU? Vuoi effettivamente aggiungere un programma in autorun per tutti gli utenti?

Multivelox
31-12-2012, 19:35
Originariamente inviato da MItaly
http://www.codeproject.com/Articles/17968/Making-Your-Application-UAC-Aware

... ma di nuovo, sei sicuro che non abbia pi senso inserire quel valore sotto HKCU? Vuoi effettivamente aggiungere un programma in autorun per tutti gli utenti?

in effetti usando HKEY_CURRENT_USER non dovrebbe esserci pi un problema con i privilegi... quindi mi sembra la via pi comoda.. che sintassi utilizzare per avviare il programma all'avvio solo per quell'utente corrente che apre quel programma la prima volta?

Grazie tante!


edit: possibile che andava modificato solo questo?

system("REG ADD HKLM \\Software\\Microsoft\\Windows\\CurrentVersion\\Ru n /V NUOVO_VALORE_STRINGA /T REG_SZ /F /D C:\\Users\\nomepc\\Desktop\\hello.exe");

con CU ?

:malol: :malol: :malol:

Loading