次のコードを使用して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
をスローしています。ユーザー資格情報を指定せずに実行すると同じコードが正常に機能します。このエラーが発生する理由がわかりません。
誰か説明してもらえますか?
初期化コードを次のものに置き換えてください。
ProcessStartInfo info
= new ProcessStartInfo(@"C:\Program Files\Internet Explorer\iexplore.exe");
Process.Start
での非フルファイルパスの使用は、ファイルがSystem32フォルダーで見つかった場合にのみ機能します。
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);
_
また、PATHのディレクトリが引用符で囲まれている場合、コマンドプロンプトからは機能しますが、同じエラーメッセージが表示されます。
つまりこれにより、exeが見つからないProcess.Start()で問題が発生します。
PATH="C:\my program\bin";c:\windows\system32
多分それは誰かを助ける。