Error in Process.Start() ― The system cannot find the file specified

匿名 (未验证) 提交于 2019-12-03 02:08:02

问题:

I am using the following code to fire the iexplore process. This is done in a simple console 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);     } } 

The above code is throwing the error The system cannot find the file specified. The same code when run without specifying the user credentials works fine. I am not sure why it is throwing this error.

Can someone please explain?

回答1:

Try to replace your initialization code with:

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

Using non full filepath on Process.Start only works if the file is found in System32 folder.



回答2:

You can't use a filename like iexplore by itself because the path to internet explorer isn't listed in the PATH environment variable for the system or user.

However any path entered into the PATH environment variable allows you to use just the file name to execute it.

System32 isn't special in this regard as any directory can be added to the PATH variable. Each path is simply delimited by a semi-colon.

For example I have c:\ffmpeg\bin\ and c:\nmap\bin\ in my path environment variable, so I can do things like new ProcessStartInfo("nmap", "-foo") or new ProcessStartInfo("ffplay", "-bar")

The actual PATH variable looks like this on my machine.

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

As you can see you can use other system variables, such as %SystemRoot% to build and construct paths in the environment variable.

So - if you add a path like "%PROGRAMFILES%\Internet Explorer;" to your PATH variable you will be able to use ProcessStartInfo("iexplore");

If you don't want to alter your PATH then simply use a system variable such as %PROGRAMFILES% or %SystemRoot% and then expand it when needed in code. i.e.

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


回答3:

Also, if your PATH's dir is enclosed in quotes, it will work from the command prompt but you'll get the same error message

I.e. this causes an issue with Process.Start() not finding your exe:

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

Maybe it helps someone.



回答4:

You can use the folowing to get the full path to your program like this:

Environment.CurrentDirectory 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!