检查可执行文件存在于Windows路径 [英] Check if an executable exists in the Windows path

查看:276
本文介绍了检查可执行文件存在于Windows路径的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我运行与 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的); //返回false
(新System.IO.FileInfo(Notepad.exe的))的存在; //返回false
 

但我需要的东西是这样的:

  System.IO.File.ExistsOnPath(Notepad.exe的); //应返回true
 

  System.IO.File.GetFullPath(Notepad.exe的); //(如UNIX这CMD)应该返回
                                           // C:\ WINDOWS \ SYSTEM32 \ NOTEPAD.EXE
 

有没有predefined类做这个任务的BCL可用?

解决方案

我觉得没有什么内置的,但你可以做这样的事情与<一个href="http://msdn.microsoft.com/en-us/library/system.io.file.exists.aspx">System.IO.File.Exists:

 公共静态布尔ExistsOnPath(字符串文件名)
{
    如果(GetFullPath(文件名)!= NULL)
        返回true;
    返回false;
}

公共静态字符串GetFullPath(字符串文件名)
{
    如果(File.Exists(文件名))
        返回Path.GetFullPath(文件名);

    VAR值= Environment.GetEnvironmentVariable(PATH);
    的foreach(VAR路径values​​.Split(';'))
    {
        VAR FULLPATH = Path.Combine(路径,文件名);
        如果(File.Exists(FULLPATH))
            返回完整路径;
    }
    返回null;
}
 

If I run a process with ShellExecute (or in .net with System.Diagnostics.Process.Start()) the filename process to start doesn't need to be a full path.

If I want to start notepad, I can use

Process.Start("notepad.exe");

instead of

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

because the direcotry c:\windows\system32 is part of the PATH environment variable.

how can I check if a file exists on the PATH without executing the process and without parsing the PATH variable?

System.IO.File.Exists("notepad.exe"); // returns false
(new System.IO.FileInfo("notepad.exe")).Exists; // returns false

but I need something like this:

System.IO.File.ExistsOnPath("notepad.exe"); // should return true

and

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

Is there a predefined class to do this task available in the BCL?

解决方案

I think there's nothing built-in, but you could do something like this with System.IO.File.Exists:

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

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(';'))
    {
        var fullPath = Path.Combine(path, fileName);
        if (File.Exists(fullPath))
            return fullPath;
    }
    return null;
}

这篇关于检查可执行文件存在于Windows路径的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆