Von einem, der auszog, Explorer zu starten

(Im Folgenden sind Beiträge aus dem SuRun Forum zusammengefasst)

Wenn man „SuRun Explorer“ ausgeführt hatte und dieses Explorer-Fenster noch offen war, konnte man mit „Start->Ausführen ‚Explorer'“ keine neue Instanz des Explorer mehr starten.  😯   Erst, wenn das mit erhöhten Rechten laufende Fenster wieder zu war, ließ sich Explorer wieder mit normalen Rechten starten. Das Problem schien nicht SuRun-Spezifisch zu sein, denn mit SuDown und MachMichadmin hat man es auch.

Mit „Process Explorer“ und „Process Monitor“ fand ich heraus, dass der Explorer zwar startet, sich aber sofort wieder selbst beendet. Vor der Fertigstellung von SuRun 1.2 habe ich mir die Funktionsweise von Explorer mal näher angesehen.

Unter Windows „ab Vista“ gibt es den Explorer-Kommandozeilenparameter „/SEPARATE“. Damit startet Explorer immer einen separaten Prozess. SuRun benutzt den Parameter ab Version 1.2.0.0.

Unter Windows „vor Vista“ sendet ein neu gestarteter Explorer seine Kommandozeile per Windows Nachricht an einen bereits laufenden.

Ist „Ordnerfenster in eigenen Prozess startenAUS, sendet der neue Explorer die Nachricht an den Desktop, wartet, bis der Desktop diese Nachricht verarbeitet hat und beendet sich dann.

Ist „Ordnerfenster in eigenen Prozess startenEIN, sucht Explorer nach einem Fenster mit dem Klassennamen „Proxy Desktop„. Findet er kein solches Fenster, erstellt er selbst eins und läuft weiter. Findet Explorer ein Fenster der Klasse „Proxy Desktop„, sendet der neue Explorer seine Kommandozeile per Windows-Nachricht an dieses Fenster, wartet, bis es die Nachricht verarbeitet hat und beendet sich dann.

Deswegen sind trotz „Ordnerfenster in eigenen Prozess startenEIN immer maximal zwei Explorer.exe im System zu finden.

Warum geht das Starten neuer eingeschränkter Explorer nicht, nachdem ein administrativ laufender offen ist?

Der neu gestartete, eingeschränkte Explorer sendet seine Kommandozeile per Nachricht an den bereits laufenden.
So weit ok.
Dann versucht er zu warten, bis der „alte“, administrativ laufende Explorer die Nachricht verarbeitet hat.
Das macht er, indem er versucht herauszufinden, dass der „alte“ Explorer auf Benutzereingaben wartet (OpenProcess, WaitForInputIdle).
Dazu (OpenProcess) hat er jedoch keine Berechtigung.
Dann beendet der „neue“ Explorer sich sofort und der „alte“ kann die Kommandozeile nicht mehr aus dem „neuen“ auslesen. Dadurch scheint es, dass kein neuer Explorer mehr startet.

Wie kann man trotzdem einen neuen Explorer starten?

Man muss,

  • Ordnerfenster in eigenen Prozess starten“ auf EIN setzen,
  • alle Fenster mit dem Klassennamen „Proxy Desktop“ (WM_CLOSE) schließen.
  • den „neuen“ Explorer starten
  • warten, bis der „neue“ Explorer sein „Proxy Desktop“ Fenster erstellt hat und es schließen (WM_CLOSE)
  • Ordnerfenster in eigenen Prozess starten“ wieder auf AUS setzen, wenn das vorher aus war

5 Reaktionen zu “Von einem, der auszog, Explorer zu starten”

  1. Christian Wimmer

    Die beste Lösung ist einen Dateicommander zu verwenden, wie z.b. FreeCommander, TotalCommander oder Speedcommander.
    Was die MS Leute im Team Windows Explorer da gemacht haben ist reiner Mist. Es scheint noch aus der Windows 9x Zeit zu kommen und daher wird die Kompatibilität gewahrt. Ich vermute, dass die Leute dort sich nicht vorstellen konnten, dass man den Explorer auch als Admin mal ausführen möchte.

    Schon gewusst? Wenn der Explorer in einem Desktop das erste Mal ausgeführt wird, dann bekommt man eine Taskleiste. Das ist unabhängig von den Explorerinstanzen der Session.

  2. Kay

    Hi Christian,

    Leider braucht man den Explorer u.A. für die Systemsteuerung.
    Viele Leute nehmen ihn auch zu täglichen Gebrauch. Deshalb muss das mehrfache Starten z.B. mit SuRun funktionieren.

    Ich denke auch, dass MS Explorer so programmiert hat, weil er in PCs mit <16MB RAM funktionieren musste. In Vista ist das ja zum Glück vorbei.

    Das mit der Taskleiste war mit bekannt 🙂 ...die wird aber AFAIK nur erzeugt, wenn der Explorer als Shell eingetragen ist und auf dem Desktop noch nicht läuft.

  3. Christian Wimmer

    Die heutigen Dateicommander unterstützen meist auch die Systemsteuerung und alle anderen Explorerfunktionen. Meist sogar besser und schneller.

  4. Christian Wimmer

    Der Windows Explorer von Win7 lässt sich nicht mehr als eigenständiger Prozess starten. Zumindest konnte ich keine Funktion erkennen.

  5. Kay

    Ich habe herausgefunden, dass Explorer sich selbst als Out-of-Process COM startet, und das verschieden, je nach der Kommandozeile. Explorer /embedding {GUID}. Der GUID sagt aus, ob explorer z.B. mit /Separate gestartet wurde… nun müsste man nur noch das COM objekt mit dem Admin Token starten können…

    Aber Win7 hat auch ein neues COM-Interface für ein Explorer Fenster. Vielleicht kann man das auch direkt benutzen… Kommt Zeit, kommt Lösung.

Einen Kommentar schreiben

Time limit is exhausted. Please reload the CAPTCHA.