2011-08-22 11 views
5

Cuando intento hacer Process.Start("echo", "%cd%"), se levanta un System.ComponentModel.Win32Exception: The system cannot find the file specified. Cuando hago esto manualmente en cmd simplemente funciona como debería. Nunca supe que hay una diferencia ...Process.Start ("echo", "% cd%") arroja el archivo W32Exception no encontrado

Además, cuando hago File.Exists(logfile.txt) (sin ruta) de un archivo que definitivamente debería estar allí, devuelve falso. Esta es, por cierto, la razón del echo anterior: depuración ...

Este error no ocurre en mi máquina de desarrollo, solo en otra donde estoy probando.

La variable Path parece normal. Ambos son WinXP. Ambos están ejecutando .NET 3.5

+0

¿Por qué está accediendo al archivo sin una ruta? Por cierto, puede obtener el directorio de trabajo actual mediante el comando 'Environment.CurrentDirectory' – Yahia

Respuesta

9

Trate Process.Start("cmd.exe", "/c echo %CD%")

por lo que el eco no es un archivo ejecutable, pero un comando en el interior.

+2

/C: Ejecuta el comando especificado y lo devuelve. Para aquellos que se preguntan qué hizo eso. – Codezilla

1

Esto es porque echo es un comando de consola, no una aplicación, no está alojado en un archivo ejecutable propio.

En cuanto a su problema de existencia de archivos, si solo utiliza el nombre de archivo sin la ruta, buscará en el directorio de trabajo, podría ser diferente al directorio que contiene la aplicación ejecutante, y completamente diferente de donde piense Los archivos deben ser: debe calificar completamente sus rutas después de conocer la configuración de las aplicaciones.

2

Puede usar System.Environment.CurrentDirectory si desea pasar el directorio de trabajo de su aplicación a cmd. AFAIK% CD% es interno a cmd, por eso Process.Start no lo expandirá. Para las variables de entorno ordinarias, puede usar Environment.ExpandEnvironmentVariables.

Cuestiones relacionadas