如果我使用ShellExecute(或在.net中使用System.Diagnostics.Process.Start())运行进程,则要启动的文件名进程不需要是完整路径。

如果要启动记事本,可以使用

Process.Start("notepad.exe");

代替
Process.Start(@"c:\windows\system32\notepad.exe");

因为direcotry c:\windows\system32是PATH环境变量的一部分。

如何在不执行进程且不解析PATH变量的情况下检查PATH中是否存在文件?
System.IO.File.Exists("notepad.exe"); // returns false
(new System.IO.FileInfo("notepad.exe")).Exists; // returns false

但我需要这样的东西:
System.IO.File.ExistsOnPath("notepad.exe"); // should return true


System.IO.File.GetFullPath("notepad.exe"); // (like unix which cmd) should return
                                           // c:\windows\system32\notepad.exe

BCL中是否有预定义的类可以执行此任务?

最佳答案

我认为没有内置的功能,但是您可以使用System.IO.File.Exists进行如下操作:

public static bool ExistsOnPath(string fileName)
{
    return GetFullPath(fileName) != null;
}

public static string GetFullPath(string fileName)
{
    if (File.Exists(fileName))
        return Path.GetFullPath(fileName);

    var values = Environment.GetEnvironmentVariable("PATH");
    foreach (var path in values.Split(Path.PathSeparator))
    {
        var fullPath = Path.Combine(path, fileName);
        if (File.Exists(fullPath))
            return fullPath;
    }
    return null;
}

关于c# - 检查Windows路径中是否存在可执行文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3855956/

10-11 01:29