2010-03-03 52 views
30

Estoy utilizando el siguiente código para iniciar el proceso iexplore. Esto se hace en una aplicación de consola simple.Error en Process.Start() - El sistema no puede encontrar el archivo especificado

public static void StartIExplorer() 
{ 
    var info = new ProcessStartInfo("iexplore"); 
    info.UseShellExecute = false; 
    info.RedirectStandardInput = true; 
    info.RedirectStandardOutput = true; 
    info.RedirectStandardError = true; 

    string password = "password"; 
    SecureString securePassword = new SecureString(); 

    for (int i = 0; i < password.Length; i++) 
     securePassword.AppendChar(Convert.ToChar(password[i])); 

    info.UserName = "userName"; 
    info.Password = securePassword; 
    info.Domain = "domain"; 

    try 
    { 
     Process.Start(info); 
    } 
    catch (System.ComponentModel.Win32Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 
} 

El código anterior es tirar el error The system cannot find the file specified. El mismo código cuando se ejecuta sin especificar las credenciales del usuario funciona bien. No estoy seguro de por qué está arrojando este error.

¿Puede alguien explicar?

Respuesta

41

tratar de sustituir el código de inicialización con:

ProcessStartInfo info 
    = new ProcessStartInfo(@"C:\Program Files\Internet Explorer\iexplore.exe"); 

Usando ruta de archivo no completa en Process.Start sólo funciona si el archivo se encuentra en la carpeta System32.

+0

Esto funcionó.Gracias :) –

+2

Debemos especificar el nombre completo del archivo ya que UseShellExecute se establece en falso. –

+0

@Rashmi Pandit - sí, deberíamos. Ya encontré el mismo problema antes :). No olvides aceptar y votar la respuesta :) –

-3

Puede utilizar el folowing para obtener la ruta completa a su programa como este:

Environment.CurrentDirectory 
+1

Esto NO le da la ruta a su programa. Esto te da el directorio actual, que es algo completamente diferente. El directorio actual puede ser diferente para comenzar, y puede cambiar en cualquier momento durante la ejecución del programa. – James

10

No puede utilizar un nombre de archivo como iexplore por sí mismo debido a que el camino hacia el Internet Explorer no aparece en el PATH variable de entorno para el sistema o usuario.

Sin embargo, cualquier ruta ingresada en la variable de entorno PATH le permite usar solo el nombre del archivo para ejecutarlo.

System32 no es especial en este sentido como cualquier directorio se puede agregar a la variable PATH. Cada ruta está simplemente delimitada por un punto y coma.

Por ejemplo, he c:\ffmpeg\bin\ y c:\nmap\bin\ en mi variable de entorno PATH, por lo que puede hacer cosas como new ProcessStartInfo("nmap", "-foo") o new ProcessStartInfo("ffplay", "-bar")

El PATH variables reales se parece a esto en mi máquina.

%SystemRoot%\system32;C:\FFPlay\bin;C:\nmap\bin; 

Como se puede ver se puede utilizar otra system variables, como %SystemRoot% para construir y construir caminos en la variable de entorno.

Entonces, si agrega una ruta como "% PROGRAMFILES% \ Internet Explorer;" a la variable de PATH usted será capaz de utilizar ProcessStartInfo("iexplore");

Si no desea alterar su PATH continuación, sólo tiene que utilizar una variable de sistema tales como %PROGRAMFILES% o %SystemRoot% y luego ampliarla en caso necesario en código. es decir,

string path = Environment.ExpandEnvironmentVariables(
     @"%PROGRAMFILES%\Internet Explorer\iexplore.exe"); 
var info = new ProcessStartInfo(path); 
+1

¿Podría explicar para qué es @ y por qué es rojo aunque esté fuera de las citas? –

+1

@ kingfrito_5005 Marca la cadena como un literal de cadena para que se ignore todo lo que normalmente se interpretaría como un carácter de escape. Para que no tenga que duplicar la barra invertida en las rutas - "\\ ruta \\ sin" vs @ "\ ruta \ con" – Fraser

+0

¡Gracias! ¡Es muy divertido descubrir estas nuevas y útiles piezas de información mientras buscas algo totalmente diferente! –

0

Además, si dir de su PATH está encerrada entre comillas, que funcionará desde el símbolo del sistema, sino que va a obtener el mismo mensaje de error

es decir, esto causa un problema con Process.Start() al no encontrar su exe:

PATH="C:\my program\bin";c:\windows\system32 

Quizás le ayude a alguien.

Cuestiones relacionadas