Проверьте, существует ли файл на 64-битной системе с помощью File.Exists
Моя ОС - 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?
Ответы
Ответ 1
Поскольку так много приложений имеют жестко закодированное имя каталога System32 в путях, MS помещает там 64-битные системные файлы, а не в каталог "System64". 32-разрядные версии теперь входят в каталог "SysWOW64" (это довольно запутанно). но для предотвращения разрыва 32-разрядных программ система выполняет перенаправление по умолчанию для 32-разрядных процессов, пытающихся получить доступ к каталогу "System32". В большинстве случаев, когда 32-битное приложение пытается получить доступ к% windir%\System32, доступ перенаправляется на% windir%\SysWOW64.
Простым способом обойти это перенаправление является использование % windir%\Sysnative вместо% windir%\System32. Win64 будет "перенаправлять" эту директорию в фактический каталог System32.
Вы можете использовать API Wow64DisableWow64FsRedirection()
, чтобы полностью отключить это перенаправление. Подробнее см. http://msdn.microsoft.com/en-us/library/aa384187.aspx.
Ответ 2
32-битные процессы видят содержимое каталога C:\Windows\SysWOW64, когда они запрашивают каталог C:\Windows\System32.
Кроме того, при попытке сохранить файл в C:\Windows\System32 он попадет в папку C:\Windows\SysWOW64.
Однако, если вы не пишете программу типа установщика, вы, вероятно, вообще не хотите связываться с этими каталогами. Все двоичные файлы в C:\Windows\System32 являются 64-битными и не могут использоваться из 32-битных процессов. Поэтому запрос для них перенаправляется на C:\Windows\SysWOW64.
Изменить: если вы действительно хотите видеть файлы, используйте Wow64DisableWow64FsRedirection через PInvoke.