Tệp tồn tại nhưng không hiển thị từ các chương trình khác [trùng lặp]


1

Câu hỏi này đã có câu trả lời ở đây:

Tôi có tệp .EXE được cài đặt trên c: \ windows \ system32 (Win7) không hiển thị cho các chương trình khác ngoại trừ các ứng dụng Windows (Explorer, cmd, v.v.)

Tôi có thể chạy nó từ bất kỳ thiết bị đầu cuối cmd. Tuy nhiên, các chương trình khác không thể mở tệp này. Họ thậm chí không thể liệt kê nó trên OpenFileDialogs của họ. Tôi cũng đã thử chạy chương trình này từ Python os.system () và nhận được "Không tìm thấy tệp".

Tôi thường có thể xem và chạy các chương trình khác nằm trong cùng thư mục (ví dụ: PING.exe)

Tôi thực sự chắc chắn rằng tập tin ở đó. Sự cố này xảy ra trên 3 máy tính khác nhau, tất cả đều chạy Windows 7.

Tệp này, trong trường hợp này là TFTP.exe, được tạo bởi Microsoft.

Các hình ảnh sau đây cho thấy tình trạng này: 1 - Windows Explorer hiển thị tệp tồn tại trên c: \ windows \ system32 2 - Hộp thoại mở tệp, từ tệp phụ thuộc, không thể thấy tệp trên cùng thư mục

Windows Explorer hiển thị tệp tồn tại trên c: \ windows \ system32

Mở hộp thoại tệp, từ tệp phụ thuộc, không thể thấy tệp trên cùng thư mục

Câu trả lời:


2

Nó có thể không thực sự ở đó, Windows chỉ mô phỏng bạn rằng nó ở đó (và chỉ Windows biết điều đó, vì vậy các chương trình khác không tìm thấy nó).

Hãy tìm nó dưới C:\Users\YourUserName\AppData\Local\VirtualStore\....

Điều đó có thể giải quyết vấn đề của bạn; nếu bạn muốn hiểu lý do tại sao nó ở đó, google File and Registry Virtualization .

Tóm lại, vì lý do kiểm soát truy cập, Windows không cho phép mọi chương trình viết ở khu vực đó, vì vậy nếu một chương trình cũ hơn cần ghi ở đó, nó sẽ chuyển hướng tệp vào bộ nhớ ảo của bạn, nhưng mô phỏng liên tục đó là nơi bạn nghĩ nó là.


1

Gần đây tôi đã gặp vấn đề rất giống nhau và tìm thấy lý do tại sao.

Tôi đã chạy tệp thực thi được biên dịch dựa trên x86 trên hệ điều hành 64 bit và thực sự tệp không tìm thấy trong tệp thực thi của tôi, không phải bằng cách mở hộp thoại tệp, không phải bằng cách tìm tệp trong thư mục có Directory.GetFiles ( ) chứ không phải với File.Exists (). Tuy nhiên, khi biên dịch tệp thực thi của tôi so với x64, tệp đã được tìm thấy lại với tất cả các phương thức trước đó.


1
Cụ thể hơn, khi một chương trình 32 bit cố gắng truy cập, System32nó sẽ được chuyển hướng đến SysWOW64vì lý do tương thích. Để đạt được 'thực', System32bạn cần có chương trình 64 bit hoặc quyền truy cập Sysnative(hướng đến thực System32trong chương trình 32 bit).
Bob
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.