AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Mit 32bit Programm 64bit Process starten und beenden

Mit 32bit Programm 64bit Process starten und beenden

Ein Thema von cramer · begonnen am 12. Sep 2017 · letzter Beitrag vom 14. Sep 2017
Antwort Antwort
Benutzerbild von cramer
cramer

Registriert seit: 23. Jun 2004
Ort: Velbert (NRW)
96 Beiträge
 
Delphi 2006 Enterprise
 
#1

Mit 32bit Programm 64bit Process starten und beenden

  Alt 12. Sep 2017, 18:17
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;
...
Erfahrung ist etwas, daß man erst bekommt, kurz nachdem man es dringend gebraucht hätte.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: Mit 32bit Programm 64bit Process starten und beenden

  Alt 13. Sep 2017, 01:17
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.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#3

AW: Mit 32bit Programm 64bit Process starten und beenden

  Alt 13. Sep 2017, 11:07
Außerdem : Explorer.exe ist nicht nur der File Explorer

Desktop
Startleiste
und wer weiß was sonst noch
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von cramer
cramer

Registriert seit: 23. Jun 2004
Ort: Velbert (NRW)
96 Beiträge
 
Delphi 2006 Enterprise
 
#4

AW: Mit 32bit Programm 64bit Process starten und beenden

  Alt 13. Sep 2017, 14:27
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
Erfahrung ist etwas, daß man erst bekommt, kurz nachdem man es dringend gebraucht hätte.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: Mit 32bit Programm 64bit Process starten und beenden

  Alt 13. Sep 2017, 17:44
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".
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von cramer
cramer

Registriert seit: 23. Jun 2004
Ort: Velbert (NRW)
96 Beiträge
 
Delphi 2006 Enterprise
 
#6

AW: Mit 32bit Programm 64bit Process starten und beenden

  Alt 14. Sep 2017, 13:00
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)
Erfahrung ist etwas, daß man erst bekommt, kurz nachdem man es dringend gebraucht hätte.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:26 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