IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Free Pascal Discussion :

Écriture dans la base de registre impossible


Sujet :

Free Pascal

  1. #1
    Membre averti
    Avatar de inspirateur
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mars 2014
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mars 2014
    Messages : 91
    Points : 339
    Points
    339
    Par défaut Écriture dans la base de registre impossible
    Bonjour !
    J'ai essayé de mettre mon programme en " autorun"; j'ai voulu qu'il s’exécute à chaque démarrage de mon ordinateur. Le code que j'ai fait fonctionne très bien sous Windows XP mais lorsque je l'ai appliqué à Windows 7 64 bit ou Windows 10 (32 et 64 bit) le code n'a pas du tout fonctionné. Je ne sais pas pourquoi.
    Quelqu'un peut-il m'aider à atteindre mon objectif ?
    J'aimerais que la solution passe par l'écriture sur la base de registre mais pas sur " Tous les programmes/démarrage".
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TForm1.DemarrageClick(Sender: TObject);
    var Registre : TRegistry;
    begin
     Registre := TRegistry.Create;
     Registre.RootKey:=HKEY_LOCAL_MACHINE;
     if Registre.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',False)
      then Registre.WriteString(ExtractFileName(Application.ExeName),ExtractFilePath(Application.ExeName)+ExtractFileName(Application.ExeName)) ;
     Registre.Free;
     end;
    Et voici le programme en question : Valisoa CyberManager.zip
    Merci d'avance
    " Le voyage compte plus que la destination. "
    ValisoaChess

  2. #2
    Membre confirmé

    Homme Profil pro
    Autre
    Inscrit en
    Novembre 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Novembre 2015
    Messages : 145
    Points : 625
    Points
    625
    Par défaut
    Depuis Windows Vista, il est nécessaire de posséder des droits d'administrateur pour écrire dans l'HKLM.

    Pour cela, notamment (et à condition de posséder potentiellement les droits nécessaires):

    - l'utilisateur peut élever de façon unitaire les droits de votre programme en le lançant: click-droit sur votre programme -> Exécuter en tant qu'administrateur

    - vous pouvez demander, en tant que programmeur, à ce que votre programme soit toujours lancé avec des droits d'administrateur. Cela doit être spécifié au niveau du manifest Windows inclus dans votre programme (i.e. requireAdministrator).

    Si vous utilisez l'IDE de Lazarus, Projet -> Options du projet ... -> Options du projet -> Utiliser les ressources "manifest" (et autoriser les thèmes) -> Niveau d'exécution -> Sélectionner alors 'administrateur requis ("requireAdministrator").

    Sinon, vous devez construire/modifier votre propre manifest Windows au niveau des ressources de votre programme, dans la partie "trustInfo"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       <trustInfo
          xmlns="urn:schemas-microsoft-com:asm.v3">
          <security>
             <requestedPrivileges>
                <requestedExecutionLevel
                   level="requireAdministrator"
                   uiAccess="false"/>
             </requestedPrivileges>
          </security>
       </trustInfo>

    Cependant, dans tous les cas, Windows demande alors l'autorisation pour l'élévation de privilèges à l'utilisateur au niveau de l'UAC: ce qui est loin d'être pratique pour lui (et plutôt "stressant").

    Par ailleurs, il n'est pas recommandé (et c'est une faille potentielle de sécurité) de demander une élévation de privilèges si ce n'est nécessaire qu'une seule fois (i.e. lors de l'installation): il vaudrait mieux séparer les 2 choses, à savoir la partie installation de la partie exécution standard.

  3. #3
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Bonjour pour windows 10, il existe aussi les clefs de registre suivantes :

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run32
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\StartupFolder

    et comme l'a spécifié FChris il faut obtenir les privilèges et faire cette manipulation lors de l'installation pour plus de sécurité
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 683
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 683
    Points : 13 092
    Points
    13 092
    Par défaut
    Il serait aussi possible d'élever reg.exe (mais seulement si l'écriture est nécessaire) par ShellExecute('runas').
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    const
      Key = 'Software\Microsoft\Windows\CurrentVersion\Run';
     
    var
      Value  :string;
      Params :string;
     
    begin
      with TRegistry.Create do
      try
        RootKey := HKEY_LOCAL_MACHINE;
        Value   := ExtractFileName(Application.ExeName);
     
        //La valeur n'existe pas ou donnée incorrecte
        if not OpenKeyReadOnly(Key) or
           not ValueExists(Value)   or
           not SameText(ReadString(Value), Application.ExeName) then
        begin
          //Confirmer l'inscription
          if MessageDlg('Privilèges administrateur requis. Continuer ?', mtConfirmation, mbYesNo, 0) = mrYes then
          begin
            Params := Format('add HKLM\%s /v %s /t REG_SZ /d %s /f', [Key, Value, Application.ExeName]);
     
            //Execution avec élévation
            ShellExecute(0, 'runas', 'reg.exe', PChar(Params), nil, SW_HIDE);
          end;
        end
        else MessageDlg('Commande déjà activée !', mtInformation, [mbOk], 0);
     
      finally
        Free;
      end;
    end;

  5. #5
    Membre averti
    Avatar de inspirateur
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mars 2014
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mars 2014
    Messages : 91
    Points : 339
    Points
    339
    Par défaut
    Bonjour tout le monde !
    Je vous remercie de vos aides précieuses. Je vais suivre vos conseils et voir ce que je peux faire de mon côté. Merci !
    Je vous mettrais au courant de mon avancé.
    " Le voyage compte plus que la destination. "
    ValisoaChess

Discussions similaires

  1. Intervenir sur la base de registre d'un autre PC
    Par olive_le_malin dans le forum Autres Logiciels
    Réponses: 6
    Dernier message: 15/05/2007, 09h22
  2. Récupération de la Date d'accés en écriture sur table/base
    Par gwenhael dans le forum Administration
    Réponses: 2
    Dernier message: 16/03/2007, 18h14
  3. Ecrire et lire sur la base de registre sous windows
    Par brackaman dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 13/11/2006, 09h50
  4. Réponses: 1
    Dernier message: 20/09/2006, 18h14
  5. Petites questions sur la base de registre
    Par tribaleur dans le forum Windows XP
    Réponses: 10
    Dernier message: 26/06/2006, 07h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo