2010-01-29 28 views
13

Hệ điều hành của tôi là 64 bit và trong C: \ Windows \ SysWOW64 có tệp 111.txt, nhưng không có tệp trong c: \ windows \ system32kiểm tra xem tệp tồn tại trên hệ thống 64 bit bằng File.Exists

nhưng sự trở lại đang follwoing đúng

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

tôi không biết tại sao? và làm thế nào tôi có thể kiểm tra nếu có tập tin 111.txt dưới system32 không SysWoW64?

Trả lời

16

Vì có quá nhiều ứng dụng đã mã hóa tên thư mục System32 thành đường dẫn, MS đặt các tệp hệ thống 64 bit ở đó thay vì trong thư mục 'System64'. Các phiên bản 32-bit bây giờ đi vào một thư mục 'SysWOW64' (nó khá khó hiểu). nhưng để ngăn chặn việc phá vỡ các chương trình 32 bit, hệ thống thực hiện chuyển hướng theo mặc định cho các quy trình 32 bit cố truy cập vào thư mục 'System32'. Trong hầu hết các trường hợp, bất cứ khi nào ứng dụng 32 bit cố truy cập% windir% \ System32, quyền truy cập được chuyển hướng đến% windir% \ SysWOW64.

Cách đơn giản để thực hiện chuyển hướng này là sử dụng % windir% \ Sysnative thay vì% windir% \ System32. Win64 sẽ 'chuyển hướng' thư mục đó vào thư mục System32 thực tế.

Bạn có thể sử dụng API Wow64DisableWow64FsRedirection() để tắt hoàn toàn chuyển hướng này. Xem http://msdn.microsoft.com/en-us/library/aa384187.aspx để biết chi tiết.

+0

Cảm ơn bạn rất nhiều. Đối với các hồ sơ tôi phát hiện ra rằng bằng cách sử dụng meta dir này "sysnative" là không đáng tin cậy, nó không phải luôn luôn làm việc như mong đợi. Tôi tự kiểm tra xem hệ điều hành là 32-bit o 64-bit, và chọn subdir thủ công. – greenoldman

5

Quy trình 32 bit xem nội dung của thư mục C: \ Windows \ SysWOW64 khi chúng yêu cầu thư mục C: \ Windows \ System32.

Ngoài ra, khi cố lưu một tệp vào C: \ Windows \ System32, nó sẽ kết thúc bằng C: \ Windows \ SysWOW64.

Tuy nhiên, trừ khi bạn đang viết một loại trình cài đặt chương trình, bạn có thể không muốn gây rối với các thư mục này cả. Tất cả các tệp nhị phân trong C: \ Windows \ System32 là 64 bit và không thể sử dụng được từ các quy trình 32 bit. Đó là lý do tại sao yêu cầu cho chúng được chuyển hướng đến C: \ Windows \ SysWOW64 ngay từ đầu.

Chỉnh sửa: Nếu bạn thực sự muốn xem tệp, hãy sử dụng Wow64DisableWow64FsRedirection qua PInvoke.

+5

Nó giống như Microsoft cũ tốt để đưa các tập tin nhị phân 64-bit vào một thư mục kết thúc bằng "32" và 32-bit nhị phân trong một kết thúc bằng "64". Có, tôi biết rằng WOW64 là viết tắt của "Windows trên Windows 64", nhưng sự lựa chọn đặt tên vẫn là aweful. –

+4

Vì vậy, nó là lỗi của Microsoft mà rất nhiều lập trình viên cứng mã hóa "system32"? –

Các vấn đề liên quan