2012-04-03 35 views
5

Vì vậy, tôi đang làm việc trên một chương trình .NET đơn giản cho công việc và nhấn một chút của một rào cản lạ tôi có thể ' t tìm ra. Ứng dụng này sử dụng tệp cấu hình để thêm ứng dụng vào trình đơn thả xuống. Tuy nhiên, trước khi nó được thêm vào menu, nó hiện system.io.file.exists để xác minh rằng tệp tồn tại, ít nhất là tại thời điểm menu được tạo.System.IO.File.Exists (@ "C: Windows System32 SnippingTool.exe") trả về false

Tuy nhiên, System.IO.File.Exists (@ "C: \ Windows \ System32 \ SnippingTool.exe") trả về false, nhưng thực thi là ở đó. Tương tự, stikynot.exe cũng trả về false. Các tệp khác trong thư mục system32 trả về true (như notepad). Tôi có thể nhập các ứng dụng này, nhưng chương trình .net của tôi không thể đọc chúng và system.io.file.exists trả về false. Tôi đã kiểm tra các quyền khác nhau mà không có may mắn. Dường như nó được phân lập thành một vài ứng dụng, nhưng tôi không chắc tại sao.

+0

Tài khoản mà chương trình đang chạy có quyền duyệt đến vị trí đó không? Nếu không, bạn sẽ nhận được sai về cuộc gọi này. – Oded

+0

Có, và nó có thể tìm thấy các ứng dụng khác trong thư mục đó tốt. – Morcalavin

+0

có thể trùng lặp của [C# Kiểm tra xem tệp thực thi có tồn tại trong đường dẫn cửa sổ không] (http://stackoverflow.com/questions/3855956/c-sharp-check-if-an-executable-exists-in-the-windows-path) – Arion

Trả lời

9

Đó là một tính năng của Windows 64 bit.

Trong x64 bạn có hai thư mục với tập tin hệ thống: system32SysWOW64.

Nếu bạn đặt bất kỳ thứ gì vào system32, tất cả ứng dụng 64 bit sẽ được xem. SysWOW64 có lý do tương thích - mọi thứ được đặt ở đó sẽ hiển thị bởi các ứng dụng 32 bit (sic!).

Vì vậy, theo như .NET có liên quan, tệp không tồn tại. Nó hoạt động cho notepad, bởi vì notepad.exe có mặt trong cả hai thư mục đó.

Bạn có thể kiểm tra hành vi này. Tạo một tệp văn bản trong một trong các thư mục, nhưng không phải tệp kia và kiểm tra sự tồn tại của nó. Sau đó thay đổi cấu hình dự án của bạn (nhấp chuột phải vào giải pháp -> Trình quản lý cấu hình) giữa x86 và x64 và tận hưởng kết quả.

+0

Vậy đó. Cảm ơn bạn. – Morcalavin

2

Tôi có một lỗi điên liên quan đến chủ đề này. Cảm ơn ya23.

Trong trường hợp của tôi, chỉ cần thay đổi thuộc tính dự án> Xây dựng> bỏ chọn Ưu tiên 32 bit

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