Файл существует, но не виден из других программ

769
Alex

У меня установлен файл .EXE в каталоге c: \ windows \ system32 (Win7), который не виден для других программ, кроме приложений Windows (Explorer, cmd и т. Д.)

Я могу запустить его с любого терминала CMD. Однако другие программы не могут открыть этот файл. Они даже не могут перечислить это в своих OpenFileDialogs. Я также попытался запустить эту программу из Python os.system () и получил «Файл не найден».

Обычно я вижу и запускаю другие программы, расположенные в том же каталоге (например, PING.exe).

Я действительно уверен, что файл там. Эта проблема возникла на 3 разных компьютерах, все под управлением Windows 7.

В данном случае это файл TFTP.exe, созданный Microsoft.

Следующие изображения показывают это условие: 1 - Проводник Windows, показывающий, что файл существует в каталоге c: \ windows \ system32 2 - Диалог открытия файла, из зависит от.exe, не может увидеть файл в том же каталоге

Проводник Windows, показывающий, что файл существует в c: \ windows \ system32

Диалог открытия файла, от зависит от.exe, не может видеть файл в том же каталоге

1

2 ответа на вопрос

2
Aganju

It might not really be there, Windows just simulates you that it is there (and only Windows knows that, so other programs don't find it).

Look for it under C:\Users\YourUserName\AppData\Local\VirtualStore\....

That might solve your issue; if you want to understand why it is there, google File and Registry Virtualization.

In a nutshell, for access control reasons, Windows doesn't allow just every program to write in that area, so if an older program needs to writes there, it redirects the file to your virtual storage, but simulates continuously that is where you thought it is.

1
Dieter Degrande

Я недавно столкнулся с этой же самой проблемой и нашел причину почему.

Я запустил свой исполняемый файл, скомпилированный для x86 в 64-битной операционной системе, и, действительно, этот файл нигде не был найден в моем исполняемом файле, ни путем открытия диалогового окна файла, ни путем поиска файла в каталоге с помощью Directory.GetFiles ( ), а не с File.Exists (). Однако при компиляции моего исполняемого файла для x64 файл был найден снова всеми предыдущими методами.

Более конкретно, когда 32-битная программа пытается получить доступ к `System32`, она перенаправляется на` SysWOW64` по причинам совместимости. Чтобы добраться до «настоящего» `System32`, вам нужна либо 64-битная программа, либо доступ к` Sysnative` (который указывает на настоящий `System32` в 32-битной программе). Bob 6 лет назад 1