Wie kann ich die Ausführung der 32-Bit-Version des Remotedesktop-Clients unter 64-Bit-Vista erzwingen?

7

Normalerweise ist es recht einfach, die 32-Bit-Version einer Windows-Anwendung über die Befehlszeile auszuführen, z. B. Fenster ausführen:

C:\Windows\SysWOW64\Notepad.exe

Sie können feststellen, dass der Prozess 32-Bit ist, indem Sie Task Monitor \ Prozesse einchecken, da neben dem Dateinamen ein * 32 angezeigt wird.

Der Remotedesktop-Client (mstsc.exe) möchte jedoch keinen Ball spielen. Die 64-Bit-Version wird immer von C: \ Windows \ System32 \ mstsc.exe ausgeführt, unabhängig davon, wie ich sie starte (Fenster ausführen, 32-Bit-Cmd-Fenster usw.). Ich habe sogar versucht, ein 32-Bit-C ++ - Programm zu schreiben, um es zu erstellen (normalerweise sind untergeordnete Prozesse auch 32-Bit), aber das hat nicht funktioniert.

Wir müssen die 32-Bit-Version ausführen, da wir einige benutzerdefinierte DLLs haben, die in den Remotedesktop integriert sind, und es nicht möglich ist, eine 32-Bit-DLL in einem 64-Bit-Prozess zu laden.

Kennt jemand einen Weg, um das zu umgehen?

John Sibly
quelle
Gibt es ein Update darüber, was passiert ist?
Knox
2
Noch nicht, obwohl es den Anschein hat, dass der 32-Bit-Prozess startet, aber dann wird die 64-Bit-Version gestartet und die 32-Bit-Version heruntergefahren (alles in Sekundenbruchteilen)
John Sibly

Antworten:

3

Ich habe einen einfachen Weg gefunden, dies zu erreichen.

http://www.davidmoore.info/2009/12/02/running-32-bit-remote-desktop-connection-on-windows-64-bit/

Lösung: Benennen Sie die 64-Bit-Datei mstsc.exe von System32 um, um zu verhindern, dass sie den 32-Bit-Prozess ersetzt.

Dies ist einfach, wenn Sie zum Umbenennen dieser Datei berechtigt sind. Wenn Sie mit NTFS arbeiten, wird möglicherweise der Fehler "Sie benötigen die Berechtigung von TrustedInstaller, um Änderungen an dieser Datei vorzunehmen" angezeigt.

Um diesen Fehler zu beheben, können Sie das Eigentum an der Datei übernehmen und sich die vollständigen Berechtigungen erteilen:

  1. Navigieren Sie zu% SystemRoot% \ System32
  2. Klicken Sie mit der rechten Maustaste auf mstsc.exe und wählen Sie Eigenschaften
  3. Gehen Sie zur Registerkarte Sicherheit
  4. Klicken Sie auf Erweitert
  5. Gehen Sie zur Registerkarte Eigentümer
  6. Klicken Sie auf Bearbeiten
  7. Wählen Sie in der Liste "Eigentümer ändern in:" Ihren Benutzernamen aus
  8. OK klicken
  9. Wechseln Sie zur Registerkarte Berechtigungen
  10. Klicken Sie auf Berechtigungen ändern ...
  11. Klicken Sie auf Hinzufügen
  12. Geben Sie Ihren Benutzernamen ein und klicken Sie auf OK
  13. Aktivieren Sie das Kontrollkästchen in der Spalte Zulassen für Vollzugriff
  14. OK klicken
  15. OK klicken
  16. Eine Windows-Sicherheitswarnung wird angezeigt. Klicken Sie auf Ja, um fortzufahren
  17. OK klicken

Jetzt können Sie die Datei mstsc.exe in mstsc.exe.bak umbenennen

Anschließend können Sie mstsc.exe über% SystemRoot% \ SysWOW64 starten und eine 32-Bit-Remotedesktopverbindung ausführen.

David Moore
quelle
Danke für deine Antwort. Am Ende haben wir ein leichtes 64-Bit-Plug-In geschrieben, das dann eine 32-Bit-Wrapper-Klasse außerhalb des Prozesses lädt (es ist ein COM-Objekt), und diese Wrapper-Klasse lädt unseren ursprünglichen Code. Ihr Vorschlag wäre jedoch hilfreich, um frühere Versionen unseres Produkts zu umgehen.
John Sibly
3

Ich habe festgestellt, dass die einzige Möglichkeit, die Ausführung von mstsc mit 32 Bit zu erzwingen, darin besteht, die Abhängigkeiten (von sysinternals) auszuführen und dann mstsc.exe von syswow64 zu öffnen. Nach dem Ausführen mit der Startprofilierung lassen Sie die Option als Standard. Dies führt dazu, dass ein mstsc * 32-Bit ausgeführt wird. Im Moment habe ich keinen anderen Weg dazu gefunden. Hack diese Hilfe Flavio


quelle
Wow-ich habe dies getestet und es funktioniert (obwohl es für unsere Benutzer keine akzeptable Problemumgehung ist!). Ich frage mich, ob Abhängigkeiten in der Lage sind, mstsc auf besondere Weise zu starten, oder ob das verwendete API-Hooking den Start irgendwie unterbricht die 64-Bit-Version? Ich stelle im abhängigen Profil fest, dass die API aufgerufen wird, um herauszufinden, ob es sich um einen WOW64-Prozess handelt.
John Sibly
2

Dies ist verwirrend bei den 64-Bit-Versionen von Windows, aber im SysWOW64-Verzeichnis befinden sich die ausführbaren 32-Bit-Dateien, die in 'WOW' (Windows unter Windows) ausgeführt werden. Die im System32-Verzeichnis befindlichen Elemente sind 64-Bit-Binärdateien und haben keine 32-Bit-Entsprechungen. Die Benennung hier ist aus Kompatibilitätsgründen und lahm, aber ich bin sicher, dass einige Software aufgrund dessen funktioniert, die sonst nicht funktionieren würde.

Sie könnten versuchen, die mstsc.exe von einer 32-Bit-Installation auf Ihren 64-Bit-Computer zu kopieren und auszuführen, aber meines Wissens verfügt 64-Bit-Windows nur über eine 64-Bit-Exe für mstsc und kann daher nicht gezwungen werden, im 32-Bit-Modus ausgeführt zu werden.

Jim
quelle
Wir haben die exe-Datei von C: \ Windows \ SysWOW64 auf einen anderen Computer kopiert und das Visual Studio-Befehlszeilentool verwendet: dumpbin / headers mstsc.exe. Gemäß den Header-Informationen in der exe ist es 32-Bit x86 scheint es nicht zu laufen!
John Sibly
2

Verwenden Sie das folgende Skript als .bat-Datei, um den Start von mstsc.exe x32 zu erzwingen.

@echo off
set WinDir=
start C:\Windows\SysWow64\mstsc.exe 
Prem Ananthu
quelle
1

Haben Sie versucht, die ausführbare 32-Bit-Datei aus einer vorhandenen 32-Bit-Installation zu kopieren und auszuführen?

Kevin Kuphal
quelle
Ich habe gerade versucht, die 32-Bit-Version von einem Windows XP-Computer in C: \ test3 zu kopieren und von dort aus auszuführen, aber der Prozess verwendet immer noch die 64-Bit-Exe von C: \ Windows \ System32 (ich überprüfe auch im Prozess Explorer)
John Sibly
0

Haben Sie den Kompatibilitätsmodus und ein älteres Betriebssystem ausprobiert? Ich denke, das System betrachtet das Manifest für die ausführbare Datei und wenn es für Vista entwickelt wurde, wird diese Registerkarte nicht angezeigt. Aber ich denke, Sie könnten das Manifest bearbeiten.

Knox
quelle
0

Meine Antwort lautet: Gibt es eine 32-Bit-Version von mstsc.exe? Ich gehe davon aus, dass mstsc, das mit 64-Bit-Windows geliefert wird, die 64-Bit-Version von mstsc ist.

Die eigentliche Antwort lautet: Wenn Sie eine DLL-Erweiterung für eine 64-Bit-Anwendung schreiben möchten, müssen Sie Ihre DLLs als 64-Bit neu kompilieren. Microsoft ist und sollte nicht verpflichtet sein, eine 32-Bit-Version jeder Betriebssystemkomponente zu liefern.

Ein weiteres Beispiel: Wenn Sie eine Shell-Erweiterung für den 64-Bit-Windows-Explorer schreiben möchten, muss es sich um eine 64-Bit-DLL handeln. Es gibt keine 32-Bit-Version von Windows Explorer. Sie unterstützen entweder 64-Bit-Windows oder nicht.

Ian Boyd
quelle
Es gibt eine 32-Bit-Version im Verzeichnis C: \ Windows \ SysWOW64. Wenn Sie es ausführen, können Sie sehen, dass es sich momentan um einen 32-Bit-Prozess im Task-Monitor handelt (* 32 neben dem Prozessnamen). Was zu passieren scheint, ist, dass es dann die 64-Bit-Version von C: \ Windows \ System32 erzeugt und die 32-Bit-Version endet. Ich glaube, ich war wirklich auf der Suche nach einer Erklärung, warum es sich so verhält. Ich denke, Sie haben insofern Recht, als die einzige Option darin besteht, ein 64-Bit-Plug-In zu schreiben. Leider müssen wir 32-Bit-DLLs von Drittanbietern laden, sodass die einzige Option darin besteht, sie in einem anderen 32-Bit-Prozess zu hosten.
John Sibly