Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    117

    [C++] Crea chiave di registro

    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!
    MSN - Messanger è fallito

  2. #2
    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.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    117
    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!
    MSN - Messanger è fallito

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    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).
    every day above ground is a good one

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    117
    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
    MSN - Messanger è fallito

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    117
    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?
    MSN - Messanger è fallito

  7. #7
    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.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    117
    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!
    MSN - Messanger è fallito

  9. #9
    http://www.codeproject.com/Articles/...tion-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?
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    117
    Originariamente inviato da MItaly
    http://www.codeproject.com/Articles/...tion-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 ?

    MSN - Messanger è fallito

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.