Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Verrücktes Verhalten wenn cmd.exe von ShellExecute(..) gestartet wird (https://www.delphipraxis.net/190922-verruecktes-verhalten-wenn-cmd-exe-von-shellexecute-gestartet-wird.html)

Der schöne Günther 21. Nov 2016 09:15

Verrücktes Verhalten wenn cmd.exe von ShellExecute(..) gestartet wird
 
Ich bin verwirrt.

Hier einmal etas ganz normales:
  1. Ich starte cmd
  2. Ich gebe "telnet" (ohne ") ein
  3. Telnet startet

Hier etwas komisches:
  1. Ich schreibe ein Delphi-Programm (siehe Code weiter unten)
  2. Ein Cmd-Fenster geht auf
  3. Ich gebe ein "telnet" (ohne ")
  4. Er sagt "Der Befehl "telnet" ist entweder falsch geschrieben oder konnte nicht gefunden werden"

Hier der Code:
Delphi-Quellcode:
program Project15;

{$APPTYPE CONSOLE}
{$R *.res}

uses
   System.SysUtils, WinApi.ShellApi, WinApi.Windows;

begin
   try
      Win32Check(
         ShellExecute(
            0,
            nil,
            'cmd',
            nil,
            nil,
            SW_SHOWDEFAULT
         ) > 32
      );
   except
      on E: Exception do
         Writeln(E.ClassName, ': ', E.Message);
   end;
   WriteLn('end.'); readln;
end.
Ja, ich habe unter Start->Parameter den Punkt "Mit Systemvariablen" angekreuzt.

Beide Konsolen haben die exakt gleiche Umgebungsvariable
Delphi-Quellcode:
PATH
: Der Befehl
Delphi-Quellcode:
ECHO %PATH%
ergibt das gleiche.

Es wird noch viel gruseliger:
Im "normalen" Fenster:
Code:
C:\ > where telnet
c:\windows\system32\telnet.exe
Im durch Delphi gestarteten Fenster:
Code:
C:\Windows\System32>where telnet
INFORMATION: Es konnten keine Dateien mit dem angegebenen
Muster gefunden werden.

Wem es jetzt noch nicht spooky genug war: Lasst uns doch mal ins Verzeichnis c:\Windows\system32 gehen und das Verzeichnis auflisten:

Normal:
Code:
C:\Windows\System32>dir tel*
 Volume in Laufwerk C: hat keine Bezeichnung.
 Volumeseriennummer: D478-6648

 Verzeichnis von C:\Windows\System32

16.07.2016  12:42           109.056 telephon.cpl
16.07.2016  12:42            88.576 TelephonyInteractiveUser.dll
16.07.2016  12:42             2.560 TelephonyInteractiveUserRes.dll
09.08.2016  09:44           129.024 telnet.exe
               4 Datei(en),       329.216 Bytes
               0 Verzeichnis(se), 13.714.972.672 Bytes frei

C:\Windows\System32>
Im "Delphi"-Fenster:
Code:
C:\Windows\System32>dir *tel*
 Volume in Laufwerk C: hat keine Bezeichnung.
 Volumeseriennummer: D478-6648

 Verzeichnis von C:\Windows\System32

16.07.2016  12:43            22.528 appidtel.exe
16.07.2016  12:42            27.648 BthTelemetry.dll
03.05.2016  22:30           299.488 IntelCpHeciSvc.exe
03.05.2016  22:30           304.136 IntelOpenCL32.dll
03.05.2016  22:30            77.832 Intel_OpenCL_ICD32.dll
16.07.2016  12:42             7.168 KBDINTEL.DLL
16.07.2016  12:43           107.520 telephon.cpl
               7 Datei(en),       846.320 Bytes
               0 Verzeichnis(se), 13.705.940.992 Bytes frei
Ich bin völlig verwirrt. Wie kann das sein?

Daniel 21. Nov 2016 09:19

AW: Verrücktes Verhalten wenn cmd.exe von ShellExecute(..) gestartet wird
 
Ich denke, dass Du hier gerade von der Verzeichnis-Virtualisierung abgewatscht wirst. System32 ist offenbar in einem Fall 64bittig, in andern Fall 32bittig. Warum Telnet nur in einer Variante vorliegt, wäre zu klären.
Schaue doch mal im Task-Manager, ob CMD.exe als 64- oder 32-Bit ausgeführt wird.

Der schöne Günther 21. Nov 2016 09:25

AW: Verrücktes Verhalten wenn cmd.exe von ShellExecute(..) gestartet wird
 
Genau das ist es, natürlich!

Danke! :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz