Process.Start()中的错误 - 系统找不到指定的文件

时间:2010-03-03 06:09:52

标签: c# .net process

我使用以下代码来触发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。在未指定用户凭据的情况下运行相同的代码可以正常工作。我不确定为什么会抛出这个错误。

有人可以解释一下吗?

6 个答案:

答案 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