проверьте, существует ли файл в 64-битной системе, используя File.Exists - PullRequest
13 голосов
/ 29 января 2010

Моя ОС 64-битная, и в загрузчике C: \ Windows \ SysWOW64 есть файл 111.txt, но в c: \ windows \ system32

этого файла нет.

но следующий код возвращает true

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

Не знаю почему? и как я могу проверить, есть ли файл 111.txt в system32, а не SysWoW64?

Ответы [ 2 ]

16 голосов
/ 29 января 2010

Поскольку многие приложения жестко закодировали имя каталога System32 в пути, MS помещает туда файлы 64-разрядных систем, а не в каталог System64. 32-битные версии теперь попадают в каталог 'SysWOW64' (это довольно запутанно). но во избежание взлома 32-разрядных программ система по умолчанию выполняет перенаправление для 32-разрядных процессов, пытающихся получить доступ к каталогу System32. В большинстве случаев, когда 32-разрядное приложение пытается получить доступ к% windir% \ System32, доступ перенаправляется на% windir% \ SysWOW64.

Простой способ обойти это перенаправление - использовать % windir% \ Sysnative вместо% windir% \ System32. Win64 «перенаправит» этот каталог в действительный каталог System32.

Вы можете использовать Wow64DisableWow64FsRedirection() API, чтобы полностью отключить это перенаправление. Подробнее см. http://msdn.microsoft.com/en-us/library/aa384187.aspx.

5 голосов
/ 29 января 2010

32-битные процессы видят содержимое каталога C: \ Windows \ SysWOW64, когда запрашивают каталог C: \ Windows \ System32.

Кроме того, при попытке сохранить файл в C: \ Windows \ System32 он окажется в C: \ Windows \ SysWOW64.

Однако, если вы не пишете программу типа программы установки, вы, вероятно, вообще не хотите связываться с этими каталогами. Все двоичные файлы в C: \ Windows \ System32 являются 64-битными и не могут использоваться в 32-битных процессах. Вот почему запрос на них перенаправляется в C: \ Windows \ SysWOW64.

Редактировать: Если вы действительно хотите видеть файлы, используйте Wow64DisableWow64FsRedirection через PInvoke.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...