1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    août 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2006
    Messages : 31
    Points : 21
    Points
    21

    Par défaut Lancer une commande DOS en mode administrateur

    Bonjour à tous

    Je viens d'installer Lazarus et je me propose d'apprendre à utiliser Free Pascal.
    Pour ce faire, je me suis donné comme objectif de créer un utilitaire aidant à la création de liens symboliques sous windows.
    A priori rien de terrifiant.

    Tout débutant dans cet environnement, j'ai cherché dans la doc et ai trouvé (merci à eux) deux liens proposant deux méthodes :
    https://pascal.developpez.com/faq/?page=Turbo-Pascal-Generalites#Comment-executer-un-programme-externe
    et
    // http://wiki.freepascal.org/Executing_External_Programs/fr


    Je bute cependant sur un 'détail'. Lorsque je lance ma commande je tombe sur une erreur 2,
    et je suppose qu'elle est provoquée par le fait que la fenêtre Dos n'est pas ouverte en mode administrateur.
    Jusqu'à présent je ne suis pas arrivé pas à trouver d'indications sur l'utilisation de ces méthodes (que ce soit Tprocess ou Exec) pour ouvrir une fenêtre en mode administrateur.
    Est ce que je fais fausse route ?
    Y a t il une solution évidente qui m'échappe ?

    Merci de vos réponses

  2. #2
    Expert éminent
    Avatar de Jipété
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    6 575
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : juillet 2006
    Messages : 6 575
    Points : 9 167
    Points
    9 167

    Par défaut

    Bonsoir,
    Citation Envoyé par zoulou153 Voir le message
    Est–ce que je fais fausse route ?
    Y a–t–il une solution évidente qui m'échappe ?
    On aurait un bout de code nous montrant comment tu t'y prends, on pourrait t'en dire plus, mais là, ...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    août 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2006
    Messages : 31
    Points : 21
    Points
    21

    Par défaut

    Citation Envoyé par Jipété Voir le message
    Bonsoir,


    On aurait un bout de code nous montrant comment tu t'y prends, on pourrait t'en dire plus, mais là, ...
    Merci de prendre du temps pour mon problème.

    Pas de soucis pour le code, mais je pensais surtout au principe de faisabilité. Est-ce quelque chose de réalisable en pascal?

    En tout état de cause voici mon code ("mon" est à relativiser naturellement)
    Il y a les procédures relatives aux deux liens que j'ai cité précédemment.



    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    unit procSymLnk;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils,dos,Process;
     
    procedure Ecrire1Lien(Cible,NomLien : string; bRep : boolean);
    procedure LancerCommandeDos(strCde : string; bWait,bOutPut : boolean);
    procedure EcrireLeLien(Cible,NomLien : string; bRep : boolean);
     
    implementation
     
    procedure Ecrire1Lien(Cible, NomLien: string; bRep: boolean);
    // https://pascal.developpez.com/faq/?page=Turbo-Pascal-Generalites#Comment-executer-un-programme-externe
    var
      CodeErreur :integer;
      StrCde : String;
      strCommutateur : string;
    begin
       // création de la commande
       if bRep then strCommutateur := '/D';
       strCde := 'MkLink ' + strCommutateur + ' ' + '"' + NomLien + '" "' +  Cible + '"';
     
       SwapVectors;
       Exec(GetEnv('COMSPEC'),strCde);
       SwapVectors;
       CodeErreur:=doserror;
    end;
     
    procedure LancerCommandeDos(strCde: string; bWait, bOutPut: boolean);
    // http://wiki.freepascal.org/Executing_External_Programs/fr
    var
      AProcess : TProcess;
      AStringList: TStringList;
     
    begin
         AProcess := TProcess.create(nil);
         AStringList := TStringList.Create;
     
         AProcess.CommandLine := strCde;
         AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes];
         AProcess.Execute;
     
          AStringList.LoadFromStream(AProcess.Output);
          AStringList.SaveToFile('output.txt');
     
         AStringList.free;
         AProcess.Free;
    end;
     
    procedure EcrireLeLien(Cible, NomLien: string; bRep: boolean);
     
    Var
    StrCde : String;
    strCommutateur : string;
     
    begin
          if bRep then strCommutateur := '/D';
          strCde := 'MkLink ' + strCommutateur + ' ' + '"' + NomLien + '" "' +  Cible + '"';
          LancerCommandeDos(strCde,true,true);
    end;
     
    end.

  4. #4
    Expert éminent
    Avatar de Jipété
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    6 575
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : juillet 2006
    Messages : 6 575
    Points : 9 167
    Points
    9 167

    Par défaut

    Citation Envoyé par zoulou153 Voir le message
    Pas de soucis pour le code, mais je pensais surtout au principe de faisabilité. Est-ce quelque chose de réalisable en pascal ?
    Mais bien sûr que oui ! On fait ça tous les jours (enfin, "utiliser TProcess" j'entends -- maintenant, l'erreur 2 je ne sais pas qui te la renvoie...)

    Tiens, un peu de lecture
    Bon, c'est sous Linux, mais c'est pour le principe, et la manière d'utiliser les paramètres (y a eu du changement depuis les tutos que tu cites).

    Pas trop le temps de m'étendre, je te laisse étudier ça.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 3 149
    Points : 11 642
    Points
    11 642
    Billets dans le blog
    5

    Par défaut

    Bonjour ! Je ne connais pas la réponse mais voici une fonction qui pourrait vous être utile :

    https://www.developpez.net/forums/d1...e/#post5764683

Discussions similaires

  1. Comment lancer une command system en PLSQL
    Par charles_mourot dans le forum PL/SQL
    Réponses: 1
    Dernier message: 07/06/2006, 12h24
  2. Lancer une commande DOS a partir d'un poste UNIX
    Par sam.fet dans le forum Linux
    Réponses: 7
    Dernier message: 19/05/2006, 14h06
  3. lancer une commande dos dans une page ASP
    Par noznoz78 dans le forum ASP
    Réponses: 4
    Dernier message: 13/02/2006, 19h06
  4. [system] lancer une commande dos
    Par romuluslepunk dans le forum APIs
    Réponses: 4
    Dernier message: 20/08/2005, 11h54
  5. [Dos] Lancer une commande dos sans attendre la fin
    Par MrEddy dans le forum Windows
    Réponses: 4
    Dernier message: 09/06/2005, 17h38

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