Question

Je suis en train d'exécuter un exécutable 64 bits (java.exe) de notre application .NET 32 bits. J'utilise la classe Process et invoquer cmd /c <command name> afin de soutenir toutes les commandes possibles (comme dir, cd etc).

Le problème est que sur ma machine que j'ai installé la version 64 bits de JRE et java.exe est uniquement disponible à partir du dossier de C:\Windows\System32 (x64). Je l'ai essayé à partir explicily version 64 bits de cmd.exe en appelant C:\Windows\System32\cmd.exe mais il est redirigé vers SysWOW64 en raison du processus d'appel étant 32 bits.

Y at-il autre chose que je peux faire pour que cela fonctionne?

EDIT Toute chose cmd /c est un peu d'un hareng saur. Il ne fait pas partie du problème, être en mesure d'exécuter 64 bits est executables.

Était-ce utile?

La solution

Vous pouvez désactiver temporairement la redirection du système de fichiers autour de l'appel à Process.Start, l'API appropriées de P à / Invoke sont et href="http://pinvoke.net/default.aspx/kernel32/Wow64RevertWow64FsRedirection.html" rel="noreferrer"> Wow64RevertWow64FsRedirection .

Une autre option consiste à utiliser% windir% \ Sysnative, qui est disponible sur Windows Vista et au-dessus.

Autres conseils

Ce que vous faites est que vous utilisez% windir% \ Sysnative pour résoudre cmd.exe 64 bits, puis vous lancez votre autre programme 64 bits via « / c » option de ligne de commande.

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:\>

Juste au cas où cela pourrait aider .. http://msdn.microsoft.com/en-us /library/aa384187(VS.85).aspx

Notez que si la demande se manifeste à afficher l'invite UAC, alors la redirection ne se fera pas. Et certains dossiers sont exemptés de redirection.

"Sysnative" semble avoir quelques inconvénients.

Exemple: Lorsque vous démarrez powershell.exe via C:\Windows\sysnative\WindowsPowerShell\v1.0\powershell.exe quelques CmdLets comme Get-AppxProvisionedPackage" and "Get-WindowsCapability ne fonctionnent pas / lancer des exceptions:

  

Get-AppxProvisionedPackage: « Erreur de réglage répertoire courant   "C: \ Windows \ Sysnative \ WindowsPowerShell \ v1.0": Une partie du chemin   "C: \ Windows \ Sysnative \ WindowsPowerShell \ v1.0" introuvable "

     

(traduit de l'allemand « Fehler beim festlegen des aktuellen   Verzeichnisses auf "C: \ Windows \ Sysnative \ WindowsPowerShell \ v1.0": Ein   Teil des Pfades "C: \ Windows \ Sysnative \ WindowsPowerShell \ v1.0" konnte   nicht gefunden werden. ")

Il pourrait y avoir des problèmes similaires en cours d'exécution d'autres processus que Powershell (chaque fois que le répertoire source de processus est important?) ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top