2014-11-23 28 views
5

Programımın, 32 bit işletim sisteminde veya 64 bit işletim sisteminde çalışıyorsa, 32 bit modunda çalışmasını istiyorum. Bu program Bat To Exe Converter v2.1.4 ile oluşturulmuştur, bu yüzden temelde bir toplu iş dosyasıdır. Normalde bir 32 bit işletim sisteminde bir toplu iş dosyasını çalıştırdığımda 32 bit modunda çalışır ve 64 bit işletim sisteminde çalıştırdığımda 64 bit modunda çalışır, değil mi? Sorun, Bat To Exe Converter v2.1.4 kullanarak programın 32 veya 64 bit olup olmadığını seçebilir. Bu yüzden 32 tane seçmeliyim ya da 32 bit işletim sisteminde çalışacağını düşünmüyorum. .Run ve .ShellExecute'u kullanarak programı yeniden başlatmak için .vbs dosyalarını kullanmayı denedim, ancak sonuç, dönüştürücüdeki bir kümeyle aynı olan mimari idi. Ayrıca cmd /c ve %WINDIR%\System32\cmd.exe /c ve ayrıca %WINDIR%\SysWOW64\cmd.exe /c çalıştı, ancak bunu yapmanın bir yolunu bulamadım. Windows 8.0 x64 kullanıyorum ve VM'im Windows 8.1 x64.32 bit kipte bir toplu iş dosyasından 64 bit kipte toplu iş dosyası nasıl çalıştırılır

cevap

2
c:\windows\sysnative 

32 bit programlar için System32 dosyasına erişim sağlar.

32 Bit

C:\Windows\System32 accesses syswow64 
c:\windows\sysnative accesses System32 

64 Bit sadece doğrudan klasörlere erişmek, söyleneni yapar - örneğin C: \ windows \ system32 System32'ı ve C erişir: \ windows \ syswow64 Syswow64 erişir.

Önemli olan sadece 32 bitlik bir program yazmanızdır. 64 bit programlar çoğunlukla 32 bit dahilidir (sadece hafıza adresleri 64 bit her şey 32 bit kalır). 64 bit sunucu uygulamaları içindir. Genel programlar için 32 bit kullanın.

DÜZENLEME

32 Bit programlarıdır 32 bit bellek adresleri için gerekli olan kullanılmayan bu yüzden sadece 32 bit (ofset) olan (taban adresi her zaman Windows 0'dır) olan 64 bit adresleme modu ile 32 bit .

64 Bit programlar 64 bitlik bir bellek adresiyle 32 bittir (her zaman 0 oldukları ve onlarca yıldan fazla olmadıkları için 64 bitlik modda temel adres boyutunu bilmiyorum). 64 bitlik bir program, yalnızca bilimsel veya video işleme görevleri için, seçtiği zaman 64 bit komutları kullanarak tam 64 bitlik bir program haline gelebilir. Fakat 64 bit her şey çok fazla bellek çiğniyor ve Windows ve diğer kütüphaneler 32 bit değer bekliyor.

Genel müdür, görevlerinizi gerçekleştirmek için hiçbir şey yapmanıza gerek olmamasıdır. İnsanlar 32bit/64bit hakkında düşünmeye başladıklarında belaya girer. Eğer bitliği görmezden gelirseniz, Microsoft tüm işi sadece işe yaraması için koydu.

Eğer iexpress'i Start - Run (Winkey + R) iletişim kutusuna yazarsanız, kendi bat2exe dosyanızı oluşturabilirsiniz.

+0

Bu ilginizi çekebilir http://social.msdn.microsoft.com/Forums/en-US/adcae113-4758-481a-a367-60d5d14d97d6/this- kullanmak nasıl-nasıl-dönüş-vbs-ve-js-dosyaları-içine-exe-dosyaları-komut satırı-olmadan-üçüncü parti-araçları? forum = –

+0

betik 64 bit işletim sistemi üzerinde iexpress denedim ve çalıştı, ama aynı programın 32 bit işletim sisteminde çalışıp çalışmadığını merak ediyorum. Programımın 64 bit modunda çalışmasını istiyorum becausesome kayıt defteri öğeleri 32 bitlik toplu iş dosyasından çağrılan reg.exe ile erişilebilir değil. Doğrudan toplu iş dosyasını çalıştırmazsam veya "64 bit kipinde (veya iExpress ile) derlemediğim sürece" HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ Run "a bir değer ekleyemiyorum. – SkYWAGz

+0

'reg flags /?' –

4

Sen toplu dosyasının en üstünde aşağıdaki kullanabilirsiniz:

@echo off 
set "SystemPath=%SystemRoot%\System32" 
if not "%ProgramFiles(x86)%"=="" set "SystemPath=%SystemRoot%\Sysnative" 

Sonraki örneğin %SystemPath%\findstr.exe için, sizin toplu iş dosyasında %SystemPath% ile Windows'un System32 dizinindeki her konsol uygulaması çağırmanız gerekir. Tabii ki, toplu iş dosyasından her zaman 64-bit komut satırı yorumlayıcısını çalıştırmak için %SystemPath%\cmd.exe ile cmd başlatabilirsiniz.

Nasıl çalışır?

SystemPath ortam değişkeni, Windows'un önde gelen dizinine ayarlanır.

32 bitlik bir yürütülebilir dosyada paketlenmiş dosya artık 32-bit Windows'taki System32 dizinindeki tüm konsol uygulamalarını çalıştırıyor ancak 64-bit Windows'ta %SystemRoot%\SysWOW64 dizininden çalışıyor. Bu nedenle, toplu iş dosyası ProgramFiles (x86) ortam değişkeni olup olmadığını yalnızca Windows x64'te bulunduğu için toplu iş dosyası denetler. Bu nedenle, üçüncü satırdaki koşul Windows x86 üzerinde yanlıştır ve SystemPath değişmez. Ancak SystemPath, 64 bit Windows üzerinde %SystemRoot%\Sysnative olarak değiştirilmiştir; %SystemRoot%\System32'daki uygulamaları sırasıyla 3212 çalıştırılabilir dosyadan cmd.exe yeniden yönlendirmeye gerek kalmadan %SystemRoot%\SysWOW64.

Daha fazla ayrıntı için Microsoft Developer Network'te (MSDN) File System Redirector makalesine bakın.

Ama daha iyi %TEMP% için toplu iş dosyasını ayıklar 32 bit yürütülebilir içinde ki her şeyi ve çalıştırın olacaktır biriyle

%SystemRoot%\System32\cmd.exe /C "%TEMP%\ExtractedBatch.bat" 

için 32 bit Windows nerede ortam değişkeni ProgramFiles (x86) mevcut veya 64 bit Windows üzerinde

%SystemRoot%\Sysnative\cmd.exe /C "%TEMP%\ExtractedBatch.bat" 

ile gelmez.

32-bit veya 64-bit cmd.exe ile Windows x64'te başlatılmadan bağımsız her zaman 64-bit konsol uygulamalarını çalıştırmak için bir toplu iş dosyasının üst kısmında kullanılabilen bir kod daha vardır. Windows'ta

@echo off 
set "SystemPath=%SystemRoot%\System32" 
if not "%ProgramFiles(x86)%"=="" (
    if exist %SystemRoot%\Sysnative\* set "SystemPath=%SystemRoot%\Sysnative" 
) 

dosyaları %SystemRoot%\Sysnative içinde varsa o ilaveten kontrol edilir x64. Bu durumda, toplu iş dosyası 32-bit cmd.exe ile yürütülür ve yalnızca bu durumda %SystemRoot%\Sysnative tümünün kullanılması gerekir. Aksi halde, Windows x64 üzerinde toplu iş dosyasına 64 bit cmd.exe ile başlatıldığı zaman %SystemRoot%\System32 da kullanılabilir, bu 64 bitlik konsol uygulamalarını içeren dizindir. Not: %SystemRoot%\Sysnative bir dizin değil. Bu %SystemRoot%\Sysnative için cd mümkün değildir ya if exist %SystemRoot%\Sysnative

+0

Bu yardımcı oldu ama hala kaybettim, toplu dosyayı doğrudan çalıştırdığımda "% windir% \ Sysnative" mevcut değil – SkYWAGz

+0

Toplu iş dosyası beklendiği gibi çalışıyor, Windows 7 x64 ve Windows XP x86 üzerinde test edildi. – Mofi

+0

CD% windir% \ Sysnative yazdığımda başarısız oluyor. – SkYWAGz

İlgili konular