Warum ist Windows Vista 64-Bit unter Verwendung eines 32-Bit cmd.exe standardmäßig? (Maschinenspezifisch)
-
22-08-2019 - |
Frage
Die Situation:
Ich brauche unsere aktuelle Entwicklungsumgebung von Windows XP 32-Bit Windows Vista 64-bit (*) zu konvertieren. Natürlich, ich habe in viele Orte in unserem Build-System laufen, wo hartcodierte Pfade waren problematisch (z „C:\Program Files
“ Werden „C:\Program Files (x86)
“). Glücklicherweise gibt es eine %ProgramFiles%
Umgebungsvariable, die in dem richtigen Verzeichnis-Karten basierend auf dem Quellprozess (32-Bit oder 64-Bit). So aktualisierte ich den Build-Skripte mit %ProgramFiles%
, und ich war sicher, dass es das Ende, dass sein würde.
Die Build-Umgebung wird von der Kommandozeile aufgerufen (C:\Windows\System32\cmd.exe
).
Das Problem:
Auf einer bestimmten Maschine (nämlich bei der Arbeit meiner Dev-Maschine), stellt sich heraus, dass C:\Windows\System32\cmd.exe
eigentlich ein 32-Bit-Prozess, so dass die Skripte die x86
Version des Program Files
Verzeichnis und alles funktioniert super.
Auf jeder anderen 64-Bit-Maschine, die ich (einschließlich meiner Hauptmaschine) finden, C:\Windows\System32\cmd.exe
ist die 64-Bit-Version und die 32-Bit-Version ist in C:\Windows\SysWow64\cmd.exe
. So ist der Build-Skripte nicht finden kann, etwas für sie suchen und scheitern.
Ich verstehe jetzt, dass die 32-Bit-cmd.exe
explizit aufgerufen werden soll, wenn das ist, was Sie brauchen, und Sie standardmäßig ein 64-Bit-cmd.exe
bekommen. Typischer Fall von WORKSFORME
...
Die Frage ist, , was mit der Maschine passiert, wo dies nicht der Fall ist? Warum erhalte ich eine 32-Bit standardmäßig auf einer Maschine cmd.exe
aber nicht auf andere? In allen Fällen bin ich ausdrücklich C:\Windows\System32\cmd.exe
vom Start|Run
Menü Ausführung, sondern nur unterschiedliche Ergebnisse auf einer Maschine immer . Alle werden auf die gleiche Ausgabe von Vista 64bit ausgeführt wird.
Alle Gedanken oder Einsicht?
(*) Bitte akzeptieren Sie, dass I muss tun. Ich bin nicht frei, zu sagen, Warum ich dies tue. Re-Installation des OS und alles von Grund auf neu wahrscheinlich funktionieren würde, aber es ist sicher übertrieben. Außerdem war es schwer genug, um unsere IT-Abteilung zu überzeugen Vista-Maschinen zu geben!
Lösung 2
Ich habe endlich das Problem, und wie erwartet ist es ganz einfach: Benutzerfehler. Explorer (das ist ein 64-Bit-Prozess ist selbst unter Windows Vista 64-bit) startet 64-Bit-Eingabeaufforderungen in der Standardeinstellung. Wenn Sie eine 32-Bit-CMD.EXE
wollen, müssen Sie explizit C:\Windows\SysWoW64\CMD.EXE
verweisen.
Der Grund, diese auf meinem System gut funktioniert, ist, dass ich für die meisten meiner Kommandozeilennutzung Far Manager verwenden, die 32-Bit (also startet er 32-Bit-Eingabeaufforderungen). Wenn ich überprüft habe ich verwirrt muss ein 32-Bit-Fenster für einen 64-Bit-Fenster (schließlich sehen sie das gleiche!) Und eine dumme Frage gestellt.
Der in Sente, das Problem mit %ProgramFiles(x86)%
ist, dass es nicht auf Windows Vista 32-Bit vorhanden ist, denn das wäre wirklich einfacher gewesen.
Ah, es gibt nichts wie eine öffentliche Posting ist ein Dummkopf von selbst zu machen ...:)
Andere Tipps
Wenn Sie von einem 32-Bit-Prozess cmd lief, dann würden Sie die 32-Bit-cmd wegen Dateiumleitung ( http://msdn.microsoft.com/en-us/library/aa384187.aspx ). Sie erhalten, die 32-Bit-Version von CMD, wenn Sie es aus dem Explorer laufen?
cmd.exe
wird aus dem Startmenü auf beiden Maschinen gestartet. Genaue Repro:
- Klicken Sie auf den Start Orb
- Geben Sie "
cmd
", nur ein Spiel kommt (c:\windows\system32\cmd.exe
) - Starten Sie es.
Auf meiner Arbeitsmaschine, es startet die 32-Bit-Version (wie durch den Task-Manager zeigte, hat es *32
auf den Namen in dem Processes
Registerkarte angehängt). Auf allen anderen 64 Maschinen Vista Ich habe versucht, startet dies die 64-Bit-Version von cmd
, und ich kann nicht eine rationale Erklärung für dieses Verhalten finden.
Ich habe nicht geprüft, ob explorer.exe
selbst 32bit oder 64bit auf der betroffenen Maschine war, vielleicht ist dies im Zusammenhang ... Danke für den Hinweis.
Statt %ProgramFiles%
, ist nicht ein %Programfiles(x86)%
das immer geht, wo Sie wollen, unabhängig davon, welche cmd.exe ausgeführt wird? Mein Windows XP 64-Bit-Systemen alle haben das; entschuldigen Sie mich für nicht die Zeit nehmen, ein Vista-System zu booten.