2010-03-13 55 views
9

Recibo el mensaje de error al ejecutar el siguiente código desde un programa de consola C#.El sistema no puede encontrar el archivo especificado al ejecutar CMD.exe desde C#

"el sistema no puede encontrar el archivo especificado "

Aquí está el código:

System.Diagnostics.Process.Start ("C: \ Windows \ System32 \ cmd .exe /c ");

¡Extraño cuando omito el modificador/c, el comando puede ejecutarse!?!

¿Alguna idea de lo que estoy haciendo mal?

+0

que tienen el mismo problema, pero desde la línea de comandos: U: \> cmd.exe Microsoft Windows [Versión 6.1 .7601] Copyright (c) 2009 Microsoft Corporation. Todos los derechos reservados. El sistema no puede encontrar la ruta especificada. – Edmondo1984

Respuesta

11

Process.Start toma un nombre de archivo como argumento.Pasar el argumento como el segundo parámetro:

System.Diagnostics.Process.Start(@"C:\Windows\System32\cmd.exe", "/c"); 
0

necesita agregar @ antes de la ruta. de esta manera: @ "C: \ Windows \ System32 \ cmd.exe/c"

3

Hay una sobrecarga de inicio para tomar argumentos. Usa ese en su lugar.

System.Diagnostics.Process.Start(@"C:\Windows\System32\cmd.exe", "/c"); 
+0

Falta el argumento '/' para la línea de comando. – Oded

+0

¡Actualizado, gracias! –

0

yo creo que el problema es que está intentando pasar un argumento (/ c) como parte de la ruta.

Los argumentos y el nombre del archivo son dos elementos distintos en la clase Process.

Trate

System.Diagnostics.Process.Start("C:\Windows\System32\cmd.exe", "/c"); 

http://msdn.microsoft.com/en-us/library/h6ak8zt5.aspx

7

Bueno, por un lado, que son difíciles de codificación de un camino, que ya está destinado a romper el sistema de alguien (no cada instalación de Windows está en C:\Windows) .

Pero el problema aquí es que esas barras invertidas se están utilizando como un carácter de escape. Hay dos maneras de escribir una cadena de ruta como esto - ya sea escapar las barras invertidas:

Process.Start("C:\\Windows\\System32\\cmd.exe", "/c"); 

o utilizar el @ para desactivar barra invertida de escape:

Process.Start(@"C:\Windows\System32\cmd.exe", "/c"); 

También es necesario pasar /c como argumento, no como parte de la ruta: use la segunda sobrecarga de Process.Start como se muestra arriba.

3

Veo tres problemas con código que envió:

1) No se está escapando de su cadena de ruta correctamente
2) Es necesario pasar el/c argumento por separado a la ruta que desea ejecutar
3) usted está asumiendo cada máquina de este código se ejecuta en cuenta ac: \ instalación de windows

me propongo escribir de la siguiente manera:

string cmdPath = System.IO.Path.Combine(Environment.SystemDirectory,"cmd.exe"); 
System.Diagnostics.Process.Start(cmdPath, "/c"); 
-1

La manera más fácil es añadir el programa a la solución con Agregar elemento existente y escriba

System::Diagnostics::Process::Start("ccsetup305.exe"); 
+0

Parece que no responde la pregunta. El OP tiene que ver con los argumentos de la línea de comandos, que no está demostrando en absoluto. – cHao

Cuestiones relacionadas