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

Langage Delphi Discussion :

ShellExecute et paramètre registre


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 194
    Par défaut ShellExecute et paramètre registre
    Bonjour à tous,

    Je suis devant un problème que j'essai de résoudre depuis plusieurs jours :
    Je veux lancer l'exécution d'un fichier registre *.reg avec la commande ShellExecute mais sans avoir la demande à l'utilisateur s'il accepte les modifications.

    Un peu partout sur le net je vois qu'il faut rajouter "/s" mais rien n'y fait j'ai tourné et retourné dans tout les sens possible ça ne fonctionne pas. En fait cela ne crée pas les clés registres.

    J'ai fait la même manip avec
    - un fichier bat, ça marche
    - un raccourcis sur le fichier reg, ça marche

    Voilà le code que j'ai utilisé pour lancer mon fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute(0,'OPEN','regedit', ' /s C:\TEMP\monfichier.reg'), Nil, SW_SHOW);
    j'ai essayé aussi ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute(0,'OPEN','regedit /s', 'C:\TEMP\monfichier.reg'), Nil, SW_SHOW);
    rien n'y fait j'ai même l'impression que les paramètres de type "/unelettre" ne fonctionnent pas (un test avec le "/C" ne marche pas non plus sur un autre code pour lancer une commande bat...)

    Je précise que je travaille avec Delphi 2010, Win XP Pro.

    Merci pour vos idées.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 638
    Billets dans le blog
    65
    Par défaut
    Tout d'abord ceci fonctionne très bien chez moi
    Citation Envoyé par D2010 WVista
    ShellExecute(0,nil,'patch.exe','/SILENT',nil,SW_HIDE);
    mais aussi sur les postes clients W XP
    donc
    j'ai même l'impression que les paramètres de type "/unelettre" ne fonctionnent pas
    c'est une fausse impression

    Plusieurs pistes de travail

    faire le open du fichier reg directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute(0,'OPEN','C:\TEMP\monfichier.reg', '/s', Nil, SW_SHOW);
    bien spécifier un ShellExecuteW ?

    Utiliser CreateProcess a la place de shellexecute ? un exemple ici post 9

    voir si le '/s' n'est pas considéré comme une séquence d'échappement (j'y croit pas trop) en testant un '//s'

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 194
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    faire le open du fichier reg directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute(0,'OPEN','C:\TEMP\monfichier.reg', '/s', Nil, SW_SHOW);
    J'ai testé, cela me met la boite de dialogue de confirmation.

    Citation Envoyé par SergioMaster Voir le message
    voir si le '/s' n'est pas considéré comme une séquence d'échappement (j'y croit pas trop) en testant un '//s'
    Pas ça non plus.

    Citation Envoyé par SergioMaster Voir le message
    Utiliser CreateProcess a la place de shellexecute ? un exemple ici post 9
    Ca me génère une exception sur EAccessViolation dans le module kernel32.dll en faisant ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var
      StartupInfo: TStartupinfo;
      ProcessInfo: TProcessInformation;
    begin
    FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
    StartupInfo.cb := SizeOf(TStartupInfo);
    CreateProcess(nil, PChar('regedit /s C:\TEMP\monfichier.reg'), nil, nil, False, NORMAL_PRIORITY_CLASS, nil, nil, Startupinfo, ProcessInfo);
    end;
    Citation Envoyé par SergioMaster Voir le message
    bien spécifier un ShellExecuteW ?
    Ne fonctionne pas non plus avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecuteW(0,'OPEN','C:\TEMP\monfichier.reg', '/s', Nil, SW_SHOW);
    Par contre je rencontre un autre type d'erreur lié aux variables que je passe pour générer mon chemin.
    le chemin de mon fichier est construit de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'C:\TEMP\' + C_S_FicRegInstall + '-' + cCurLogon + '.reg'
    Les variables sont de type "string".
    J'ai donc pensé à typer toute la chaîne en PChar et cela me retourne la boite de dialogue de confirmation mais avec le chemin du fichier sous la forme d'une succession de carrés, comme ces caractère non pris en charge et forcément ça lui plait pas quand on lui répond oui.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 937
    Par défaut
    Utilise reg import

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute(0, 'open', 'reg', 'import c:\temp\monfichier.reg', nil, SW_HIDE);

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 194
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Utilise reg import

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute(0, 'open', 'reg', 'import c:\temp\monfichier.reg', nil, SW_HIDE);
    Marche pas non plus...

    Note : Je vous jure que ça marche pas , je ne vous fais pas tourner en bourrique !

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 194
    Par défaut
    Ah bah c'est de pire en pire.
    J'ai voulut contourner l'utilisation du /s dans Delphi en créant un fichier bat avec le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    regedit /s "C:\TEMP\monfichier.reg"
    et en lançant la commande delphi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute(0,'OPEN','C:\TEMP\MAJRegistre.bat', Nil, Nil, SW_SHOWDEFAULT);
    Et ben ça marche pas non plus alors que si je lance manuellement le fichier bat créé, ça marche
    J'ai revérifié les chemins, les noms de fichiers, etc. Je suis bien administrateur de mon poste.

    J'ai pourtant l'éxécution d'un fichier bat (via ShellExecute) qui se fait bien dans une autre partie de mon code.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 937
    Par défaut
    Un batch se lance par CMD /C:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute(0,'OPEN','cmd', '/C C:\TEMP\MAJRegistre.bat', Nil, SW_SHOWDEFAULT);

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 194
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Un batch se lance par CMD /C:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute(0,'OPEN','cmd', '/C C:\TEMP\MAJRegistre.bat', Nil, SW_SHOWDEFAULT);
    au passage tu as oublié un paramètre "nil"

    Ca m'étonne car j'ai le lancement d'un fichier bat dans une autre partie de mon programme qui se passe nickel et que je lance comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute(0, 'OPEN', 'C:\TEMP\GetSID.bat', nil, nil, SW_SHOWDEFAULT);
    Mais j'ai quand même essayé et pareil, rien ne se passe dans ma base de registre...

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/07/2008, 16h41
  2. paramètre base de registre
    Par lemapas dans le forum Windows XP
    Réponses: 1
    Dernier message: 17/06/2008, 16h40
  3. Modifier un paramètre IE via les registres
    Par jpberub dans le forum Windows
    Réponses: 0
    Dernier message: 02/08/2007, 17h28
  4. Clé de registre avec des paramètres
    Par wappyboy dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 18/07/2006, 17h10
  5. base de registre : paramtres de valeurs !
    Par hiko-seijuro dans le forum MFC
    Réponses: 2
    Dernier message: 25/09/2005, 13h56

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