2010-01-29 14 views
13

kullanarak 64 bit sistemde dosya bulunup bulunmadığını kontrol edin İşletim sistemim 64 bittir ve C: \ Windows \ SysWOW64 dosyasında 111.txt dosyası var, ancak c: \ windows \ dosyasında dosya yok system32File.Exists

ama neden bilmiyorum

file = @"C:\Windows\System32\111.txt";  
bool bExist = System.IO.File.Exists(file); 

gerçek follwoing kod dönüş? ve SysWoW64 değil system32 altında 111.txt dosyasının olup olmadığını nasıl kontrol edebilirim?

cevap

16

Çok sayıda uygulama, System32 dizin adını yollara kodladığından, MS, 64-bit sistem dosyalarını bir 'System64' dizininde yerine koyar. 32-bit sürümleri artık 'SysWOW64' dizinine giriyor (oldukça kafa karıştırıcı). ancak 32-bit programların kırılmasını önlemek için, sistem 'System32' dizinine erişmeye çalışan 32-bit işlemler için varsayılan olarak bir yönlendirme gerçekleştirir. Çoğu durumda, bir 32 bit uygulama% windir% \ System32 dosyasına erişmeye çalıştığında, erişim% windir% \ SysWOW64 konumuna yönlendirilir.

Bu yeniden yönlendirmeyi aşmanın basit bir yolu% windir% \ System32 yerine % windir% \ Sysnative kullanmaktır. Win64 bu dizini gerçek System32 dizinine 'yönlendirecek'.

Bu yönlendirmeyi tamamen devre dışı bırakmak için Wow64DisableWow64FsRedirection() API'sini kullanabilirsiniz. Detaylar için bakınız http://msdn.microsoft.com/en-us/library/aa384187.aspx.

+0

Çok teşekkür ederim. Kayıt için bu meta dir "sysnative" kullanarak güvenilir olmadığını, her zaman beklendiği gibi çalışmadığını öğrendim. OS 32-bit 64-bit ise manuel olarak kontrol ettim ve manuel olarak aldım. – greenoldman

5

32bit işlemleri, C: \ Windows \ System32 dizini için sorulduğunda C: \ Windows \ SysWOW64 dizininin içeriğine bakın. Ayrıca, bir dosyayı C: \ Windows \ System32 dosyasına kaydetmeye çalışırken, C: \ Windows \ SysWOW64 biçiminde sonuçlanır. Ancak, bir yükleyici türü program yazmıyorsanız, muhtemelen bu dizinleri hiç karıştırmak istemezsiniz. C: \ Windows \ System32'deki tüm ikili dosyalar 64bit'dir ve 32bit işlemlerden kullanılamaz. Bu yüzden onlar için istek ilk etapta C: \ Windows \ SysWOW64'e yönlendiriliyor.

Düzenleme: Dosyaları gerçekten görmek istiyorsanız, PInvoke aracılığıyla Wow64DisableWow64FsRedirection kullanın.

+5

Bu, "32" ve 32 bitlik ikili dosyalar ile biten bir klasöre "64" ile biten bir klasöre 64 bitlik ikili dosyalar koymak gibi eski Microsoft'a benzer. Evet, WOW64'ün "Windows 64'de Windows" anlamına geldiğini biliyorum, ancak adlandırma seçeneği hala çok açık. –

+4

Bu yüzden, Microsoft'un birçok programcının "system32" kodlamasını yaptığı hata nedir? –

İlgili konular