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 Mit 32bit Programm 64bit Process starten und beenden (https://www.delphipraxis.net/193816-mit-32bit-programm-64bit-process-starten-und-beenden.html)

cramer 12. Sep 2017 17:17

Mit 32bit Programm 64bit Process starten und beenden
 
Hallo,

unter Win10x64 kann ich einen 32bit Process "cmd.exe" problemlos starten und beenden.

Einen 64bit Process "explorer.exe" kann ich zwar starten aber nicht beenden.

wfso liefert beim 64bit sofort ein WAIT_OBJECT_O zurück.

Wenn ich in diesem Fall dann zu Fuß warte und dann terminateProcess versuche, gibts ein "access denied"

Kann es sein, daß "processInfo.hProcess" gar nicht auf den gestarteten Explorer zeigt?
Oder ist es wirklich ein Rechteproblem?

Auszug aus dem Code (BDS2006)
Delphi-Quellcode:
....
   ChangeFSRedirection( true );
   if createProcess(
         nil,
         pchar( prg ),
         nil,
         nil,
         false,
         NORMAL_PRIORITY_CLASS,
         nil,
         pchar( verz ),
         startupInfo,
         processInfo
      ) then begin
      ChangeFSRedirection( false );
      wfsoCode := waitForSingleObject( processInfo.hProcess, timeout * 1000 );
      if wfsoCode = Wait_TimeOut then begin
         terminateProcess( processInfo.hProcess, exitCode );
      end;
      if wfsoCode = WAIT_OBJECT_0 then begin
         if ProcessInfo.dwProcessId > 0 then begin
            xWait := timeOut;
            while xWait > 0 do begin
              sleep( 1000 );
              xWait := xWait -1;
            end;
            terminateProcess( processInfo.hProcess, exitCode );
         end;
      end;
...

Zacherl 13. Sep 2017 00:17

AW: Mit 32bit Programm 64bit Process starten und beenden
 
Der Explorer Prozess läuft in der Regel nur ein einziges Mal (außer du hast das in den Systemeinstellungen anders festgelegt). Jede neue Instanz schickt nur eine Nachricht an die Hauptinstanz, welche dann ein zusätzliches Fenster öffnet. Sprich: Dein neu gestarteter Prozess wird tatsächlich innerhalb von Sekundenbruchteilen wieder beendet.

himitsu 13. Sep 2017 10:07

AW: Mit 32bit Programm 64bit Process starten und beenden
 
Außerdem : Explorer.exe ist nicht nur der File Explorer :!:

Desktop
Startleiste
und wer weiß was sonst noch

cramer 13. Sep 2017 13:27

AW: Mit 32bit Programm 64bit Process starten und beenden
 
Danke für die Info.

Im Explorer Ansicht - Optionen - Ansicht ist
"[x] Ordnerfenster in einem eigenen Prozess starten" eingestellt

und verifiziert:
HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Explorer\Advanced\SeparateProcess = 1

Zacherl 13. Sep 2017 16:44

AW: Mit 32bit Programm 64bit Process starten und beenden
 
Ich könnte mir vorstellen, dass der Explorer die extra Prozesse dennoch vom Hauptprozess aus erstellt, also "deine Instanz" -> "Message an Hauptinstanz" -> "startet 2. Instanz".

cramer 14. Sep 2017 12:00

AW: Mit 32bit Programm 64bit Process starten und beenden
 
Ich habe mit das jetzt mal im Process Explorer angeschaut:

Gestartet wurde der Explorer so:
c:\windows\explorer.exe N:

und so sieht die Command line: im PE aus:
C:\WINDOWS\explorer.exe /factory,{75dff2b7-6936-4c06-a8bb-676a7b00b24b} -Embedding

Parent ist svchost.exe(1448)


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:30 Uhr.

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