如果我使用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/