2010-01-29 12 views
13

Mi SO es de 64 bits y en el foler C: \ Windows \ SysWOW64 hay un archivo 111.txt, pero no existe el archivo en c: \ windows \ system32compruebe si el archivo existe en el sistema de 64 bits con File.Exists

pero el verdadero código de retorno follwoing

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

no sé por qué? y ¿cómo puedo verificar si existe el archivo 111.txt en system32 no SysWoW64?

Respuesta

16

Debido a que muchas aplicaciones han codificado el nombre del directorio System32 en rutas, MS colocó los archivos del sistema de 64 bits en lugar de en un directorio 'System64'. Las versiones de 32 bits ahora van a un directorio 'SysWOW64' (es bastante confuso). pero para evitar romper programas de 32 bits, el sistema realiza una redirección por defecto para los procesos de 32 bits que intentan acceder al directorio 'System32'. En la mayoría de los casos, cada vez que una aplicación de 32 bits intenta acceder a% windir% \ System32, el acceso se redirige a% windir% \ SysWOW64.

Una forma simple de evitar esta redirección es usar % windir% \ Sysnative en lugar de% windir% \ System32. Win64 'redirigirá' ese directorio al directorio real de System32.

Puede utilizar la API Wow64DisableWow64FsRedirection() para deshabilitar por completo esta redirección. Vea http://msdn.microsoft.com/en-us/library/aa384187.aspx para más detalles.

+0

Muchas gracias. Para el registro, descubrí que usar este meta dir "sysnative" no es confiable, no siempre funciona como se esperaba. Comprobé manualmente si el sistema operativo es de 32 bits o de 64 bits y escogido manualmente subdividir. – greenoldman

5

Procesos de 32 bits ver los contenidos del directorio C: \ Windows \ SysWOW64 cuando solicitan el directorio C: \ Windows \ System32.

Además, al intentar guardar un archivo en C: \ Windows \ System32, terminará en C: \ Windows \ SysWOW64.

Sin embargo, a menos que esté escribiendo un programa tipo instalador, probablemente no quiera meterse con estos directorios. Todos los archivos binarios en C: \ Windows \ System32 son de 64 bits y no se pueden usar a partir de procesos de 32 bits. Es por eso que la solicitud de ellos se redirige a C: \ Windows \ SysWOW64 en primer lugar.

Editar: Si realmente desea ver los archivos, use Wow64DisableWow64FsRedirection mediante PInvoke.

+5

Es como si el viejo y viejo Microsoft pusiera binarios de 64 bits en una carpeta que terminara en "32" y binarios de 32 bits en uno que terminara en "64". Sí, sé que WOW64 significa "Windows en Windows 64", pero la elección del nombre sigue siendo horrible. –

+4

Entonces, ¿es culpa de Microsoft que tantos programadores hayan codificado "system32"? –

Cuestiones relacionadas