Bonjour à tous,

depuis les dernières mises à jour Windows, je rencontre un problème lors de l'exécution d'un fichier BATCH depuis mon programme Delphi 7. Je m'explique.

J'utilise la fonction suivante pour afficher la liste des ports COM :

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
 
procedure TForm1.btnPortsCOMClick(Sender: TObject);
Const
     NomFichier : AnsiString = 'ChangePort.Bat';
 
Var
   CheminFichier : AnsiString;
 
begin
     CheminFichier:=IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName));
 
     Try
        DeleteFile(CheminFichier+NomFichier);
     Except
     End;
 
     mmoBatch.Clear;
     mmoBatch.Lines.Add('@ECHO OFF');
     mmoBatch.Lines.Add('ECHO Etat des ports COM (CHANGE PORT /QUERY) : ');
     mmoBatch.Lines.Add('ECHO.');
     mmoBatch.Lines.Add('CHANGE PORT /QUERY');
     mmoBatch.Lines.Add('ECHO.');
     mmoBatch.Lines.Add('PAUSE');
     mmoBatch.Lines.SaveToFile(CheminFichier+NomFichier);
     mmoBatch.Clear;
 
     ShellExecute(0,'OPEN',PChar(CheminFichier+NomFichier),Nil,Nil,SW_SHOW);
end;
Lorsque je clique sur ce bouton, j'ai bien une fenêtre dos qui s'ouvre. mais le message "'Change' n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes" apparaît

Nom : Sans titre.png
Affichages : 1712
Taille : 24,6 Ko

J'ai uniquement ce problème sur mon Windows 10. et il n'est apparu que suite aux dernières mises à jour Windows.
Ce qui est étrange c'est que je n'ai pas ce problème sur Windows 7. De plus, sur mon Windows10, si j'exécute depuis l'explorateur le fichier bat généré par mon programme, je n'ai pas ce problème non plus.

J'ai essayé d'ajouter un manifest à mon programme pour qu'il s'exécute avec les privilèges "highestAvailable" mais ça ne change rien (Je fais mon test sur une session Administrateur).

Savez-vous comment je pourrais corriger ce problème?

EDIT : Après quelques recherches supplémentaires. il semble que le problème vienne du fait que l'invit de commande lancée par mon appli Delphi est la : "C:\Windows\SysWOW64\cmd.exe" alors que celle lancée lors de l'exécution manuelle d'un fichier bat est "C:\Windows\System32\cmd.exe". Y a-t-il un moyen de forcer le choix de l'invit de commande pour la "C:\Windows\System32" dans Delphi?



Merci d'avance.

Noémie