Archivo C#.Exists devuelve false, file does exist


Usando VS 15, C# con. Net 4.5.2
El equipo está en una red de anuncios, con el nombre de anuncio "AD".
Este problema ocurre con AD normal: derechos de usuario, derechos de administrador de anuncios y derechos de administrador local. No importa qué derechos obtenga el programa, ocurre el mismo problema.

Nuestro archivo de prueba es " C:/windows/system32/conhost.exe".
El archivo anterior existe, es muy existente. Puedo verlo con Explorer.

Este es el archivo en explorer:
introduzca la descripción de la imagen aquí

Estas son las propiedades del archivo:
introduzca la descripción de la imagen aquí

Puedes ver que está ahí, ¿verdad?
El siguiente comando cmd comprueba si el archivo existe:

IF EXIST "C:\windows\system32\conhost.exe" (echo does exist) ELSE (echo doesnt exist)

Devuelve " existe" como se prometió.

El siguiente código C# comprueba si el archivo existe:

FileInfo file = new FileInfo("C:/windows/system32/conhost.exe");
MessageBox.Show(file.Exists + "");

Esto devuelve " False".

Este código también devuelve "False":

MessageBox.Show(File.Exists("C:/windows/system32/conhost.exe") + "");

Este código tampoco encuentra it:

foreach (string file in Directory.GetFiles("C:/windows/system32/"))
{
    //conhost is NEVER mentioned, like it doesn't exist
}

Este código tampoco lo encuentra:

foreach (string file in Directory.EnumerateFiles("C:/windows/system32/"))
{
    //conhost is NEVER mentioned, like it doesn't exist
}

Falso, Falso, Falso:

MessageBox.Show(File.Exists("C:/windows/system32/conhost.exe") + "");
MessageBox.Show(File.Exists("C:\\windows\\system32\\conhost.exe") + "");
MessageBox.Show(File.Exists(@"C:\windows\system32\conhost.exe") + "");

¿Qué estoy haciendo mal?
Nota adicional: Copié conhost a C:\conhost.exe, y mi programa puede encontrar que sin problema. Mi programa también encuentra otros archivos en system32, solo que no conhost y algunos otros. Por ejemplo, encuentra " conectar.dll " que está en system32, por lo que no es el permiso de lectura del directorio.
Más notas extra: conhost.exe y conectar.dll tiene la misma seguridad atributos (ficha Seguridad en las propiedades del archivo).

Author: Willem Van Onsem, 2017-03-23

2 answers

Si está utilizando el sistema x64, tendrá contenido diferente del directorio c:\Windows\System32 para las aplicaciones x86 y x64. Asegúrese de que está utilizando la misma arquitectura que ejecuta el archivo por lotes y su aplicación C#.

 39
Author: Uladzimir Palekh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-23 13:26:32

En la documentación de MSDN para System. IO. File. Exists(path) , dice:

Si la persona que llama lo hace no tiene permisos suficientes para leer el archivo especificado, no excepción se lanza y el método devuelve false independientemente de la existencia de camino.

Por esta razón, podemos asumir con seguridad que su aplicación no tiene acceso de lectura a ese archivo específico. Compruebe la configuración de seguridad y conceda acceso de lectura si aún no lo ha hecho tan.

Cree su aplicación (en modo release) y ejecute como administrador.

 9
Author: Nathangrad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-23 13:25:52