2014-11-23 15 views
5

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

2
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.

+0

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 –

+0

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

+0

Vedere 'reg flags /?' –

4

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

+0

Ha aiutato ma sono ancora perso, quando eseguo il file batch direttamente è "% windir% \ Sysnative" non esiste – SkYWAGz

+0

Il file batch funziona come previsto, testato su Windows 7 x64 e Windows XP x86. – Mofi

+0

Quando digito cd% windir% \ Sysnative fallisce. – SkYWAGz

Problemi correlati