2012-04-03 19 views
5

Así que estoy trabajando en un sencillo programa de .NET para el trabajo y toco un poco de un obstáculo extraño que puedo ' t averiguar. La aplicación utiliza un archivo de configuración que agrega aplicaciones a un menú desplegable. Sin embargo, antes de agregarse al menú, existe un archivo system.io.exists para verificar que el archivo existe, al menos en el momento en que se crea el menú.System.IO.File.Exists (@ "C: Windows System32 SnippingTool.exe") devuelve falso

Sin embargo, System.IO.File.Exists (@ "C: \ Windows \ System32 \ SnippingTool.exe") devuelve falso, pero el ejecutable está allí. Del mismo modo, stikynot.exe también devuelve falso. Otros archivos en el directorio system32 devuelven true (como el bloc de notas). Puedo archivar estas aplicaciones, pero mi programa .net simplemente no puede leerlas y system.io.file.exists devuelve falso. Revisé varios permisos sin suerte. Parece estar aislado de algunas aplicaciones, pero no estoy seguro de por qué.

+0

Toma en cuenta que el programa se ejecuta en tener permisos para navegar a ese lugar? De lo contrario, obtendrá una respuesta falsa en esta llamada. – Oded

+0

Sí, y puede encontrar otras aplicaciones en ese directorio muy bien. – Morcalavin

+0

posible duplicado de [C# Comprobar si existe un ejecutable en la ruta de Windows] (http://stackoverflow.com/questions/3855956/c-sharp-check-if-an-executable-exists-in-the-windows-path) – Arion

Respuesta

9

Esa es una característica de Windows de 64 bits.

En 64 que tienen dos carpetas con archivos de sistema: system32 y syswow64.

Si pones nada en system32, que será visto por todos aplicaciones 64 bits. SysWOW64 existe por razones de compatibilidad: cualquier cosa allí será visible por 32 bit (sic!) Aplicaciones.

Por lo que respecta a .NET, el archivo no existe. Funciona para el bloc de notas, porque Notepad.exe está presente en ambos directorios.

Puede comprobar este comportamiento. Cree un archivo de texto en uno de los directorios, pero no en el otro y verifique su existencia. Luego, cambie la configuración de su proyecto (haga clic con el botón derecho en la solución -> Configuration Manager) entre x86 y x64 y disfrute del resultado.

+0

Eso es todo. Gracias. – Morcalavin

2

Tengo un error loco relacionado con este tema. Gracias ya23.

En mi caso, simplemente cambiando las propiedades del proyecto> Crear> desmarque Prefiero 32 bits

Cuestiones relacionadas