it-swarm.com.de

Fehler in Process.Start () - Das System kann die angegebene Datei nicht finden

Ich verwende den folgenden Code, um den iexplore-Prozess auszulösen. Dies geschieht in einer einfachen Konsolen-App.

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

Der obige Code löst den Fehler The system cannot find the file specified aus. Wenn derselbe Code ausgeführt wird, ohne die Benutzeranmeldeinformationen anzugeben, funktioniert das problemlos. Ich bin nicht sicher, warum es diesen Fehler auslöst.

Kann mir jemand bitte erklären?

38
Rashmi Pandit

Versuchen Sie, Ihren Initialisierungscode durch Folgendes zu ersetzen:

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

Die Verwendung eines nicht vollständigen Dateipfads für Process.Start funktioniert nur, wenn die Datei im System32-Ordner gefunden wird.

49
Jojo Sardez

Sie können einen Dateinamen wie iexplore nicht selbst verwenden, da der Pfad zu Internet Explorer nicht in der Umgebungsvariablen PATH für das System oder den Benutzer aufgeführt ist.

Bei jedem in die Umgebungsvariable PATH eingegebenen Pfad können Sie jedoch nur den Dateinamen verwenden, um sie auszuführen.

System32 ist diesbezüglich nicht besonders, da der Variable PATH das Verzeichnis any hinzugefügt werden kann. Jeder Pfad wird einfach durch ein Semikolon begrenzt.

Zum Beispiel habe ich c:\ffmpeg\bin\ und c:\nmap\bin\ in meiner Pfadumgebungsvariablen, so dass ich Dinge wie new ProcessStartInfo("nmap", "-foo") oder new ProcessStartInfo("ffplay", "-bar") machen kann.

Die tatsächliche Variable PATH sieht auf meinem Rechner so aus. 

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

Wie Sie sehen, können Sie andere system variables verwenden, z. B. %SystemRoot%, um Pfade in der Umgebungsvariablen zu erstellen und zu erstellen.

Wenn Sie also einen Pfad wie "% PROGRAMFILES%\Internet Explorer;" In Ihrer Variable PATH können Sie ProcessStartInfo("iexplore"); verwenden.

Wenn Sie Ihre PATH nicht ändern möchten, verwenden Sie einfach eine Systemvariable wie %PROGRAMFILES% oder %SystemRoot% und erweitern Sie sie bei Bedarf im Code. d.h.

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

Wenn das Verzeichnis Ihres PATHs in Anführungszeichen steht, funktioniert es auch über den Befehl Prompt. Sie erhalten jedoch dieselbe Fehlermeldung

Das heißt Dies verursacht ein Problem mit Process.Start (), das Ihr Exe nicht findet:

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

Vielleicht hilft es jemandem.

0
Macke