Ошибка в Process.Start () - система не может найти указанный файл - PullRequest
39 голосов
/ 03 марта 2010

Я использую следующий код для запуска процесса 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. Тот же код при запуске без указания пользовательских учетных данных работает нормально. Я не уверен, почему он выдает эту ошибку.

Может кто-нибудь объяснить, пожалуйста?

Ответы [ 5 ]

53 голосов
/ 03 марта 2010

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

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

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

11 голосов
/ 15 августа 2013

Вы не можете использовать имя файла, например iexplore, потому что путь к Internet Explorer не указан в переменной среды 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);
0 голосов
/ 01 июня 2018

Я решил проблему после включения файла в проект Я надеюсь, что помог

0 голосов
/ 20 февраля 2017

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

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

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

Может быть, это кому-нибудь поможет.

0 голосов
/ 20 марта 2013

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

Environment.CurrentDirectory
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...