Comment faire pour exécuter un fichier de commandes en mode 64 bits à partir d'un fichier de commandes en 32 bits mode de
Je veux que mon programme à exécuter en 32 bits mode si dans un OS 32 bits ou en 64 bits mode si c'est dans une version 64 bits de l'OS. Ce programme est créé avec Bat to Exe Converter v2.1.4, c'est donc d'abord un fichier de commandes. Normalement, quand je lance un fichier de commandes sur un OS 32 bits, il fonctionne en 32 bits mode et quand je le lance sur une version 64 bits de l'OS, il s'exécute en mode 64 bits, n'est-ce pas? Le problème est que l'utilisation de Bat to Exe Converter v2.1.4 je peux choisir si le programme est en 32 ou 64 bits. J'ai donc de choisir 32 ou autre chose que je ne pense pas que cela va fonctionner sur un OS 32 bits. J'ai essayé d'utiliser .vbs fichiers de lancer à nouveau le programme à l'aide .Exécuter et .ShellExecute mais le résultat a été l'architecture étant le même que celui défini dans le convertisseur. J'ai aussi essayé cmd /c
et %WINDIR%\System32\cmd.exe /c
et aussi %WINDIR%\SysWOW64\cmd.exe /c
mais je ne pouvais pas trouver un moyen de le faire. J'utilise Windows 8.0 x64 et ma VM Windows 8.1 x64.
OriginalL'auteur SkYWAGz | 2014-11-23
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser suivant en haut de votre fichier de commandes:
Ensuite, vous devez faire appel à chaque application console dans le répertoire System32 de Windows avec
%SystemPath%
dans votre fichier de commandes, par exemple%SystemPath%\findstr.exe
. Bien sûr, vous pouvez également commencer cmd avec%SystemPath%\cmd.exe
pour exécuter toujours 64 bits interpréteur de ligne de commande à partir de l'intérieur du fichier de commandes.Comment ça marche?
La variable d'environnement SystemPath est d'abord situé au répertoire System32 de Windows.
Le fichier de lot emballé dans un exécutable 32 bits fonctionne maintenant toutes les applications de console, en effet, de répertoire System32 sur 32 bits de Windows, mais à partir de
%SystemRoot%\SysWOW64
répertoire sur Windows 64 bits.Donc le fichier de commandes vérifie si la variable d'environnement ProgramFiles(x86) existe, ce qui est le cas uniquement sur Windows x64. Par conséquent, la condition sur la troisième ligne est faux sur Windows x86 et SystemPath n'est pas modifié. Mais SystemPath est modifié pour
%SystemRoot%\Sysnative
sur Windows 64 bits pour appeler les applications dans%SystemRoot%\System32
de fichier exécutable 32 bits respectivementcmd.exe
sans redirection vers%SystemRoot%\SysWOW64
.Pour plus de détails, voir Redirecteur De Système De Fichier article de MSDN (Microsoft Developer Network).
Mais le mieux serait de le faire tout à l'intérieur de l'exécutable 32 bits qui extrait le fichier de commandes pour
%TEMP%
et l'utiliser avecpour Windows 32 bits où la variable d'environnement ProgramFiles(x86) n'existe pas ou avec
sur une version 64 bits de Windows.
Voici un code qui peut être utilisé au dessus d'un fichier de commandes pour exécuter toujours en 64 bits, les applications de console indépendante sur le démarrage de Windows x64 avec 32-bit ou 64-bit
cmd.exe
.Sur Windows x64 il est en outre vérifié si il y a des fichiers dans
%SystemRoot%\Sysnative
. Dans ce cas, le fichier de commandes est exécuté avec 32-bitcmd.exe
et uniquement dans ce cas%SystemRoot%\Sysnative
doit être utilisée. Sinon%SystemRoot%\System32
peut également être utilisé sur Windows x64 que lorsque le fichier de commandes est commencé avec la version 64 bitscmd.exe
, c'est le répertoire contenant le 64 bits, les applications de console.Remarque:
%SystemRoot%\Sysnative
n'est pas un répertoire. Il n'est pas possible decd
à%SystemRoot%\Sysnative
ou de l'utilisationif exist %SystemRoot%\Sysnative
Le fichier batch fonctionne comme prévu, testé sur Windows 7 x64 et Windows XP x86.
Quand j'ai tapez cd %windir%\Sysnative il échoue.
%SystemRoot%\Sysnative
n'est pas un répertoire. C'est un alias n'existant que pour x86 applications sur Windows x64 pour exécuter les applications 64 bits dans%SystemRoot%\System32
au lieu de les applications 32 bits dans%SystemRoot%\SysWOW64
. Accès de répertoire comme aveccd
avec%SystemRoot%\Sysnative
échec, mais l'accès aux fichiers comme avecif exist %SystemRoot%\Sysnative\*
travail avec le groupe spécial de l'alias. Voir l'article Microsoft à propos de Redirecteur de Système de Fichier.OriginalL'auteur Mofi
Donne accès à System32 pour la version 32 bits de programmes.
32 Bits
64 Bits ne fonctionne tout simplement ce qui est dit, l'accès aux dossiers directement - par exemple C:\windows\system32 accède à System32 et C:\windows\syswow64 accède à Syswow64.
Le point est que vous ne doit être écrit en 32 bits programme. 64 bits programmes sont pour la plupart 32 bits en interne (uniquement des adresses de mémoire de 64 bits, tout le reste est de 32 bits). 64 bits est pour le serveur d'applications. Utiliser 32 bits pour les programmes généraux.
MODIFIER
32 Bits programmes sont en 32 bits à 64 bits mode d'adressage de 32 bits (adresse de base est toujours 0 dans Windows) sont inutilisées pour seulement 32 bits (offset) est nécessaire pour les adresses mémoire.
64 Bits programmes sont en 32 bits avec une version 64 bits de décalage d'adresse de mémoire (je ne sais pas la taille de la base d'adresses en mode 64 bits, car ils sont toujours à 0 et ont été sans importance pour des décennies). Un 64 bits programme peut devenir un 64 bits du programme, simplement en utilisant 64 bits instructions, lorsqu'il choisit, en général, à des fins scientifiques ou vidéo les tâches de traitement. Mais en 64 bits tout mâche trop de mémoire et Windows " et d'autres bibliothèques s'attendre à 32 bits.
Le principe général est que vous avez besoin de ne rien faire pour réaliser vos tâches. Des personnes ont des problèmes lorsqu'ils commencent à penser 32bit/64bit. Si vous ignorez le nombre de bits, Microsoft a mis tout le travail pour le travail.
Si vous tapez iexpress dans Démarrer - Exécuter (Winkey + R) boîte de dialogue, vous serez en mesure de faire votre propre bat2exe.
J'ai essayé iexpress sur mon 64 bits de l'OS et il a travaillé, mais je me demandais si ce même programme peut s'exécuter dans un OS 32 bits. Je veux que mon programme à exécuter en mode 64 bits becausesome de registre n'est pas accessible avec reg.exe appelé à partir d'un 32 bits fichier de commandes. Je ne peux pas ajouter une valeur à "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" à moins que j'ai directement exécuter le fichier de commandes ou je le compiler en mode 64 bits (ou avec iExpress).
Voir
reg flags /?
Est-il un IExpress dans SysWow64. Est-il un dans System32.
Je veux dire, le iExpress programme compilé en 64 bits OS de travailler sur un OS 32 bits ?
OriginalL'auteur