我使用以下代码来触发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
。在未指定用户凭据的情况下运行相同的代码可以正常工作。我不确定为什么会抛出这个错误。
有人可以解释一下吗?
答案 0 :(得分:50)
尝试用以下内容替换初始化代码:
ProcessStartInfo info
= new ProcessStartInfo(@"C:\Program Files\Internet Explorer\iexplore.exe");
在Process.Start
上使用非完整文件路径仅在System32文件夹中找到该文件时才有效。
答案 1 :(得分:11)
您不能单独使用iexplore
这样的文件名,因为系统或用户的PATH
环境变量中未列出Internet Explorer的路径。
但是,输入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);
答案 2 :(得分:0)
此外,如果您的PATH的目录用引号括起来,它将在命令提示符下工作,但您将收到相同的错误消息
即。这会导致Process.Start()找不到你的exe:
的问题PATH="C:\my program\bin";c:\windows\system32
也许对某人有所帮助。
答案 3 :(得分:0)
我遇到了同样的问题,但是没有一个解决方案对我有用,因为在某些特殊情况下,The system cannot find the file specified
消息可能会引起误解。
在我的情况下,我将Notepad++与registry redirect结合用于notepad.exe。不幸的是,我在注册表中到Notepad ++的路径是错误的。
实际上,消息The system cannot find the file specified
告诉我,它找不到与文件类型(* .txt)关联的应用程序(Notepad ++),而不是文件本身。
答案 4 :(得分:-1)
我在项目中包含文件后解决了问题 我希望我帮助
答案 5 :(得分:-4)
您可以使用以下内容获取程序的完整路径,如下所示:
Environment.CurrentDirectory