web-dev-qa-db-ja.com

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をスローしています。ユーザー資格情報を指定せずに実行すると同じコードが正常に機能します。このエラーが発生する理由がわかりません。

誰か説明してもらえますか?

39
Rashmi Pandit

初期化コードを次のものに置き換えてください。

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

Process.Startでの非フルファイルパスの使用は、ファイルがSystem32フォルダーで見つかった場合にのみ機能します。

55
Jojo Sardez

Internet Explorerへのパスがシステムまたはユーザーのiexplore環境変数にリストされていないため、PATHのようなファイル名を単独で使用することはできません。

ただし、PATH環境変数に入力されたパスにより、ファイル名のみを使用して実行できます。

anyディレクトリをPATH変数に追加できるので、_System32_はこの点で特別ではありません。各パスは、セミコロンで区切られています。

たとえば、パス環境変数に_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);
_
13
Fraser

また、PATHのディレクトリが引用符で囲まれている場合、コマンドプロンプトからは機能しますが、同じエラーメッセージが表示されます。

つまりこれにより、exeが見つからないProcess.Start()で問題が発生します。

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

多分それは誰かを助ける。

0
Macke