Desidero che il mio programma venga eseguito in modalità 32 bit se in un sistema operativo a 32 bit o 64 bit se è in un sistema operativo a 64 bit. Questo programma è stato creato con il convertitore Bat To Exe v2.1.4, quindi è fondamentalmente un file batch. Normalmente quando eseguo un file batch su un sistema operativo a 32 bit viene eseguito in modalità a 32 bit e quando lo eseguo su un sistema operativo a 64 bit viene eseguito in modalità a 64 bit, non è vero? Il problema è, usando Bat To Exe Converter v2.1.4 Posso scegliere se il programma è 32 o 64 bit. Quindi devo scegliere 32 oppure non penso che funzionerà su un sistema operativo a 32 bit. Ho provato a utilizzare i file .vbs per riavviare il programma utilizzando . Run e .ShellExecute ma il risultato è stato l'architettura è uguale a quella impostata nel convertitore. Ho anche provato cmd /c
e %WINDIR%\System32\cmd.exe /c
e anche %WINDIR%\SysWOW64\cmd.exe /c
ma non sono riuscito a trovare un modo per farlo. Uso Windows 8.0 x64 e il mio VM è Windows 8.1 x64.Come eseguire un file batch in modalità 64 bit da un file batch in modalità 32 bit
risposta
c:\windows\sysnative
Fornisce accesso a System32 per programmi a 32 bit.
32 bit
C:\Windows\System32 accesses syswow64
c:\windows\sysnative accesses System32
64 bit fa solo ciò che è detto, accedere alle cartelle direttamente - ad esempio C: \ windows \ system32 accede System32 e C: \ windows \ syswow64 accessi Syswow64.
Il punto è che dovresti scrivere solo un programma a 32 bit. I programmi a 64 bit sono per lo più a 32 bit interni (solo gli indirizzi di memoria sono a 64 bit, tutto il resto rimane a 32 bit). 64 bit è per applicazioni server. Usa 32 bit per i programmi generali.
EDIT
32 programmi bit sono a 32 bit con una modalità di indirizzamento a 64 bit di cui 32 bit (indirizzo di base è sempre 0 in Windows) sono utilizzati in modo che solo 32 bit (offset) è richiesto per gli indirizzi di memoria .
64 I programmi bit sono a 32 bit con indirizzo di memoria di offset a 64 bit (non conosco le dimensioni dell'indirizzo di base in modalità 64 bit poiché sono sempre 0 e sono irrilevanti da decenni). Un programma a 64 bit può diventare un programma completo a 64 bit, semplicemente usando le istruzioni a 64 bit quando lo si sceglie, generalmente per le attività di elaborazione scientifica o video. Ma a 64 bit tutto mastica troppa memoria e le librerie di Windows e di altro prevedono valori a 32 bit.
Il principio generale è che non è necessario fare nulla per raggiungere i propri compiti. Le persone si mettono nei guai quando iniziano a pensare a 32 bit/64 bit. Se ignori il testimone, Microsoft ha messo tutto il lavoro per farlo funzionare.
Se si digita iexpress nella finestra di dialogo Start - Esegui (Winkey + R), sarà possibile creare il proprio bat2exe.
Si potrebbe utilizzare in seguito nella parte superiore del file batch:
@echo off
set "SystemPath=%SystemRoot%\System32"
if not "%ProgramFiles(x86)%"=="" set "SystemPath=%SystemRoot%\Sysnative"
Dopodiché è necessario chiamare ogni applicazione console nella directory System32 di Windows con %SystemPath%
nel file batch, ad esempio %SystemPath%\findstr.exe
. Naturalmente è anche possibile avviare cmd con %SystemPath%\cmd.exe
per eseguire sempre l'interprete della riga di comando a 64 bit all'interno del file batch.
Come funziona?
La variabile di ambiente SystemPath viene impostata prima nella directory System32 di Windows.
Il file batch compresso in un eseguibile a 32 bit esegue ora tutte le applicazioni console effettivamente dalla directory System32 su Windows a 32 bit, ma dalla directory %SystemRoot%\SysWOW64
su Windows a 64 bit.
Pertanto, il file batch controlla se la variabile di ambiente ProgramFiles (x86) esiste che è il caso solo su Windows x64. Pertanto, la condizione sulla terza riga è falsa su Windows x86 e SystemPath non viene modificato. Ma SystemPath viene modificato in %SystemRoot%\Sysnative
in Windows a 64 bit per chiamare le applicazioni in %SystemRoot%\System32
da eseguibile a 32 bit rispettivamente cmd.exe
senza reindirizzamento a %SystemRoot%\SysWOW64
.
Per ulteriori dettagli, vedere l'articolo File System Redirector in Microsoft Developer Network (MSDN).
Ma meglio sarebbe quello di farlo tutti dentro il file eseguibile a 32 bit che estrae il file batch per %TEMP%
ed eseguirlo sia con
%SystemRoot%\System32\cmd.exe /C "%TEMP%\ExtractedBatch.bat"
per Windows a 32 bit, dove variabile d'ambiente ProgramFiles (x86) non esiste o con
%SystemRoot%\Sysnative\cmd.exe /C "%TEMP%\ExtractedBatch.bat"
a 64 bit di Windows.
Ecco un altro codice che può essere utilizzato in cima a un file batch per eseguire sempre le applicazioni della console a 64 bit indipendentemente dall'avvio su Windows x64 con 32 bit o con 64 bit .
@echo off
set "SystemPath=%SystemRoot%\System32"
if not "%ProgramFiles(x86)%"=="" (
if exist %SystemRoot%\Sysnative\* set "SystemPath=%SystemRoot%\Sysnative"
)
In Windows x64 è inoltre controllato se ci sono file in %SystemRoot%\Sysnative
. In questo caso il file batch viene eseguito con 32-bit cmd.exe
e solo in questo caso è necessario utilizzare solo %SystemRoot%\Sysnative
. Altrimenti %SystemRoot%\System32
può essere utilizzato anche su Windows x64 come quando il file batch viene avviato con 642 bit cmd.exe
, questa è la directory contenente le applicazioni della console a 64 bit.
Nota: %SystemRoot%\Sysnative
non è una directory. Non è possibile cd
a %SystemRoot%\Sysnative
o utilizzare if exist %SystemRoot%\Sysnative
Si può essere interessato a questo http://social.msdn.microsoft.com/Forums/en-US/adcae113-4758-481a-a367-60d5d14d97d6/this- is-how-to-turn-vbs-and-js-files-in-exe-files-from-the-command-line-senza-strumenti di terze parti? forum = scripting –
Ho provato iexpress sul mio sistema operativo a 64 bit e ha funzionato, ma mi chiedo se lo stesso programma potrebbe essere eseguito in un sistema operativo a 32 bit. Voglio che il mio programma funzioni in modalità 64 bit perché il registro non è accessibile con reg.exe richiamato da un file batch a 32 bit. Non è possibile aggiungere un valore a "HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ Run" a meno che non eseguo direttamente il file batch o lo compili in modalità a 64 bit (o con iExpress). – SkYWAGz
Vedere 'reg flags /?' –