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

 Delphi Discussion :

ShellExecute et Windows 10 64Bits y a t'il un problème ?


Sujet :

Delphi

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut ShellExecute et Windows 10 64Bits y a t'il un problème ?
    Bonjour à toutes et à tous,

    Pour ne pas chaque fois redémarrer complètement le Pc à cause de ne plus avoir accès au réglage du volume qui se trouve dans la TrayIcon, je kill Explorer et Windows le relance car il en a besoin pour le système.

    Avec un fichier .bat il n'y a aucun problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    taskkill /im explorer.exe /f
    start explorer.exe
    exit
    Le même code avec ShellExecute cela fonctionne à moitié car Explorer ne se relance pas et donc écran noir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ShellExecute(Handle,'open', 'CMD', '/c taskkill.exe /f /im explorer.exe && start explorer.exe', nil, SW_SHOWNORMAL);
    Ce n'est pas le lancer en mode Administrateur car j'ai tout essayé même lancé mon fichier .bat avec ShellExecute alors que le lancer seul cela fonctionne.

    Peut être que quelqu'un à une astuce pour l'utilisation de ShellExecute et cette commande sinon en dehors de Delphi il existe plusieurs méthodes.

    En vous remerciant,

    @+,

    cincap

  2. #2
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Bonjour,

    j'ai pas de Win10 pour tester mais tu peux tenter ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute(Handle, Nil, 'CMD' , '/c "start /wait taskkill.exe /f /im explorer.exe&&explorer.exe"', Nil , SW_SHOWNORMAL);//SW_HIDE
    ça fait longtemps que je n'utilise plus cette méthode. Je passe par un TDosCommand qui offre bien plus souplesse (AMHA)
    mais avec un peu de chance ...

    Cordialement,

    @+

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    @ Cirec, comment vas tu avec tes précieux conseils ?

    Merci de ton intervention, j'ai testé et j'ai aussi un écran noir après le Kill.

    C'est fou en double cliquant sur le fichier batch même sans être Administrateur cela fonctionne correctement et pourtant c'est le même code.

    Je dois avoir ta source (ID=34484) permettant de faire les commandes Dos avec attribut ou pas, je testerai aussi si je remet la main dessus.

    D'après mes recherches, une fois que le processus "explorer" est bien arrêté c'est Windows 10 qui le relance.

    Je continue aussi de tester des fonctions de Kill.

    @+,

    cincap

  4. #4
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    ... chaudement

    et en faisant un ShellExecute avec le fichier *.bat que je renommerai au passage en *.cmd ?

    pour savoir si c'est un problème de droits tu peux tester en lançant ton appli en mode Admin!

    Cordialement,
    @+

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    @ Cirec, merci pour ta suggestion.

    J'ai testé en mode Administrateur, j'ai testé le fichier .bat avec ShellExecute c'est pareil.

    J'ai aussi testé avec l'extension .cmd, c'est pareil par contre en les testant direct soit fichier .bat et .cmd cela fonctionne.

    J'ai aussi testé avec la "function KillProcess" et la cela fonctionne correctement et proprement peut importe en Administrateur ou pas.

    J'ai donc le choix mais tu me connais j'aimerai comprendre pourquoi pas avec ShellExecute ou alors il faut passer par syswow64 ?

    Sinon la touche ctrl + majuscule et click droit sur la barre de tâche on retrouve l'arrêt de explorer en bas dans le menu.

    @+,

    cincap

  6. #6
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    dernière suggestion

    et je ne sais pas si ça va aider ^^
    comme tu ne sembles pas avoir "TDosCommand"
    je tenterai de créer un autre fichier cmd qui fait appel au bat qui fait le job
    et je lancerai celui-ci ... pour voir si ça fait une différence ou pas

    Cordialement,

    @+

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    Bonjour à toutes et à tous,

    Encore un grand merci @ Cirec.

    Voici ma solution d'attente qui fonctionne correctement et proprement afin de killer puis relancer Explorer sur Windows 10 64bits version 1903.

    1) Avec uniquement un fichier .bat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    taskkill /im explorer.exe /f
    start explorer.exe
    exit
    Ne fonctionne pas avec ShellExecute dans Delphi 6 !

    Fonctionne aussi avec Windows PowerShell Administrateur ou pas.


    2) Avec une fonction de KillProcess :

    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
     
    //Tue et relance
     
    function KillProcess(const ProcessName : string) : boolean; 
    var ProcessEntry32 : TProcessEntry32; 
        HSnapShot : THandle; 
        HProcess : THandle; 
    begin 
      Result := False; 
     
      HSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
      if HSnapShot = 0 then exit; 
     
      ProcessEntry32.dwSize := sizeof(ProcessEntry32); 
      if Process32First(HSnapShot, ProcessEntry32) then 
      repeat 
        if CompareText(ProcessEntry32.szExeFile, ProcessName) = 0 then 
        begin 
          HProcess := OpenProcess(PROCESS_TERMINATE, False, ProcessEntry32.th32ProcessID); 
          if HProcess <> 0 then 
          begin 
            Result := TerminateProcess(HProcess, 0); 
            CloseHandle(HProcess); 
          end; 
          Break; 
        end; 
      until not Process32Next(HSnapShot, ProcessEntry32); 
     
      CloseHandle(HSnapshot); 
    end;
    Usage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    KillProcess('explorer.exe');
    Avec ce code, la relance se fait toujours par Windows.

    Peut être qu'un membre trouvera la solution pour utiliser un ShellExecute avec soit le fichier .bat ou avec sa commande.

    @+,

    cincap

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    @ tous, je ferme ce topic car la solution avec ShellExecute (code direct ou fichier .bat) est correcte il fallait juste utiliser la redirection.

    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
     
    procedure TFProcessus.Button8Click(Sender: TObject);
    Var
      Wow64FsEnableRedirection: LongBool;
     
    begin
      try
       Wow64DisableWow64FsRedirection(Wow64FsEnableRedirection);
     
    //Avec fichier .bat
     
       //ShellExecute(0, nil, PChar(chappli + 'Restart_Windows_Exploreur.bat'), nil, nil, 0);
     
    //ou code direct
     
     ShellExecute(HInstance,'open', 'cmd.exe', '/c taskkill.exe /f /im explorer.exe&&start explorer.exe', nil, SW_SHOWNORMAL);
     
       Wow64EnableWow64FsRedirection(Wow64FsEnableRedirection);
      except
        on E: Exception do
          Writeln(E.ClassName, ': ', E.Message);
      end;
     
    end;
    @+,

    cincap

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/10/2009, 17h19
  2. Envoie email - Windows 2008 64bits
    Par Maxow dans le forum ASP
    Réponses: 1
    Dernier message: 21/10/2009, 21h27
  3. icolorfolder pour Windows XP 64bits
    Par anthony0 dans le forum Windows XP
    Réponses: 2
    Dernier message: 19/09/2009, 14h30
  4. Détection Windows 32bits/64bits
    Par Kaluza dans le forum C++
    Réponses: 6
    Dernier message: 08/08/2009, 19h07
  5. Problème ralentissement Windows Vista 64bits
    Par lesttat93 dans le forum Windows Vista
    Réponses: 1
    Dernier message: 25/02/2009, 14h33

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