Frage

Ich versuche, eine 64-Bit-ausführbare Datei (java.exe) von unserer 32-Bit .NET Anwendung auszuführen. Ich verwende Process Klasse und Aufrufen cmd /c <command name>, um alle möglichen Befehle zu unterstützen (wie dir, cd usw.).

Das Problem ist, dass auf meiner Maschine, die ich 64-Bit-Version von JRE installiert und java.exe ist nur von C:\Windows\System32 Ordnern (x64). Ich habe versucht, deutlich hingewiesen 64-Bit-Version von cmd.exe beginnend von C:\Windows\System32\cmd.exe Aufruf aber es wird wegen Aufruf Prozess 32 Bit SysWOW64 umgeleitet werden.

Gibt es etwas, was ich tun kann, um diese an der Arbeit?

Bearbeiten Die ganze cmd /c Sache ist ein bisschen von einem roten Hering. Es ist nicht Teil des Problems, ist 64 Bit-Programme ausführen zu können.

War es hilfreich?

Lösung

Sie können vorübergehend Dateisystem Umleitung um den Anruf zu Process.Start die entsprechenden APIs zu P / Invoke ist Wow64DisableWow64FsRedirection und Wow64RevertWow64FsRedirection .

Eine weitere Option ist% windir verwenden% \ Sysnative, die unter Windows Vista verfügbar ist und oben.

Andere Tipps

Was Sie tun, ist, dass Sie% windir verwenden% \ Sysnative zu lösen 64-Bit cmd.exe und dann starten Sie Ihre anderen 64-Bit-Programm über "/ c" Befehlszeilenoption.

c:\>set proc
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_ARCHITEW6432=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 70 Stepping 1, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=4601

c:\>c:\windows\sysnative\cmd
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

c:\>set proc
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 70 Stepping 1, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=4601

c:\>

Für den Fall, könnte dies helfen .. http://msdn.microsoft.com/en-us /library/aa384187(VS.85).aspx

Beachten Sie, dass, wenn die Anwendung manifestiert die UAC-Eingabeaufforderung zu zeigen, dann Umleitung erfolgt nicht. Und auch einige Ordner sind von Umleitung.

"Sysnative" scheint einige Nachteile zu haben.

Beispiel: Wenn Sie powershell.exe über C:\Windows\sysnative\WindowsPowerShell\v1.0\powershell.exe einige Cmdlets wie Get-AppxProvisionedPackage" and "Get-WindowsCapability beginnen Ausnahmen nicht funktionieren / werfen:

  

Get-AppxProvisionedPackage: „Fehler beim Setzen aktuellen Verzeichnisses   "C: \ Windows \ Sysnative \ Windows \ v1.0": Ein Teil des Weges   "C: \ Windows \ Sysnative \ Windows \ v1.0" nicht gefunden "werden könnte

     

(übersetzt aus dem Deutschen „Fehler beim Festlegen des current   Verzeichnis auf "C: \ Windows \ Sysnative \ Windows \ v1.0": Ein   Teil des Pfades "C: \ Windows \ Sysnative \ Windows \ v1.0" Könnte   nicht gefunden Werden ".)

Es könnte ähnliche Probleme andere Prozesse als Powershell ausgeführt wird (immer dann, wenn der Prozess Quellverzeichnis ist wichtig?) ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top