Подтвердить что ты не робот

Ошибка в Process.Start() - система не может найти указанный файл

Я использую следующий код для запуска процесса iexplore. Это делается в простом консольном приложении.

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

Вышеприведенный код выдает ошибку The system cannot find the file specified. Тот же код при запуске без указания учетных данных пользователя работает нормально. Я не уверен, почему он выбрасывает эту ошибку.

Может кто-нибудь объяснит?

4b9b3361

Ответ 1

Попробуйте заменить код инициализации следующим образом:

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

Использование не полного пути к файлу в Process.Start работает только в том случае, если файл находится в папке System32.

Ответ 2

Вы не можете использовать имя файла, например iexplore, потому что путь к интернет-проводнику не указан в переменной среды PATH для системы или пользователя.

Однако любой путь, введенный в переменную среды PATH, позволяет вам использовать только имя файла для его выполнения.

System32 не является особым в этом отношении, поскольку любой каталог может быть добавлен к переменной PATH. Каждый путь просто разделяется запятой.

Например, у меня есть переменная c:\ffmpeg\bin\ и c:\nmap\bin\ в моей переменной окружения пути, поэтому я могу делать такие вещи, как new ProcessStartInfo("nmap", "-foo") или new ProcessStartInfo("ffplay", "-bar")

Фактическая переменная PATH выглядит так на моей машине.

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

Как вы можете видеть, вы можете использовать другие system variables, такие как %SystemRoot% для построения и построения путей в переменной среды.

Итак - если вы добавляете такой путь, как "% PROGRAMFILES%\Internet Explorer"; к вашей переменной PATH вы сможете использовать ProcessStartInfo("iexplore");

Если вы не хотите изменять свой PATH, просто используйте системную переменную, например %PROGRAMFILES% или %SystemRoot%, а затем разворачивайте ее, когда это необходимо в коде. то есть.

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

Ответ 3

Кроме того, если ваш каталог PATH заключен в кавычки, он будет работать из командной строки, но вы получите то же сообщение об ошибке

т.е. это вызывает проблему с Process.Start(), не находящим ваш exe:

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

Может быть, это помогает кому-то.

Ответ 4

Вы можете использовать следующее, чтобы получить полный путь к вашей программе следующим образом:

Environment.CurrentDirectory