web-dev-qa-db-fra.com

Erreur dans Process.Start () - Le système ne peut pas trouver le fichier spécifié

J'utilise le code suivant pour déclencher le processus iexplore. Cela se fait dans une application console simple.

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);
    }
}

Le code ci-dessus génère l'erreur The system cannot find the file specified. Le même code lorsqu'il est exécuté sans spécifier les informations d'identification de l'utilisateur fonctionne correctement. Je ne sais pas pourquoi il lance cette erreur.

Quelqu'un peut-il s'il vous plaît expliquer?

38
Rashmi Pandit

Essayez de remplacer votre code d'initialisation par:

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

L'utilisation de filepath non complet sur Process.Start ne fonctionne que si le fichier se trouve dans le dossier System32.

49
Jojo Sardez

Vous ne pouvez pas utiliser un nom de fichier tel que iexplore seul, car le chemin d'accès à Internet Explorer n'est pas répertorié dans la variable d'environnement PATH pour le système ou l'utilisateur.

Cependant, tout chemin entré dans la variable d'environnement PATH vous permet d'utiliser uniquement le nom du fichier pour l'exécuter.

System32 n'est pas spécial à cet égard, car tout répertoire peut être ajouté à la variable PATH. Chaque chemin est simplement délimité par un point-virgule.

Par exemple, j'ai c:\ffmpeg\bin\ et c:\nmap\bin\ dans ma variable d'environnement de chemin, je peux donc faire des choses comme new ProcessStartInfo("nmap", "-foo") ou new ProcessStartInfo("ffplay", "-bar")

La variable PATH actuelle ressemble à ceci sur ma machine. 

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

Comme vous pouvez le constater, vous pouvez utiliser un autre system variables, tel que %SystemRoot%, pour créer et construire des chemins dans la variable d’environnement.

Donc, si vous ajoutez un chemin tel que "% PROGRAMFILES%\Internet Explorer;" à votre variable PATH, vous pourrez utiliser ProcessStartInfo("iexplore");

Si vous ne souhaitez pas modifier votre PATH, utilisez simplement une variable système telle que %PROGRAMFILES% ou %SystemRoot%, puis développez-la si nécessaire dans le code. c'est à dire.

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

De plus, si le répertoire de votre PATH est placé entre guillemets, il fonctionnera à partir de l'invite de commande, mais vous obtiendrez le même message d'erreur.

C'est à dire. cela cause un problème avec Process.Start () qui ne trouve pas votre fichier exe:

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

Peut-être que ça aide quelqu'un.

0
Macke