当Windows能够找到它时,如何找到Mercurial可执行文件的完整路径?

ang*_*son 11 .net windows executable path

澄清:问题是:我如何找到Mercurial命令行客户端.如果答案适用于任何可执行文件,那就更好了,但我真的对hg.exe可执行文件感兴趣.

如果我知道可执行文件的名称,比如hg.exeMercurial命令行客户端,并且Windows知道它的位置,因为我只能hg log从命令提示符执行它并执行,为了让我自己找到该可执行文件,涉及哪些步骤,以与命令提示符和Windows相同的方式执行此操作?

基本上,如果Windows能够找到它,我希望我的程序能够找到它.

是否有WinAPI功能或类似功能?代码将在.NET中运行,用C#编写,所以如果.NET中有任何内置的东西,那将是首选的解决方案,但除此之外,我不会对此使用P/Invoke不利.

我已经看到了这个问题的一个潜在重复:c#检查Windows路径中是否存在可执行文件,但是它是否存在?只是遍历PATH环境变量的内容并在每个目录中查找可执行文件?

我有一个模糊的概念,那只是所涉及的步骤之一,并且可能存在Windows可以使用的注册表覆盖,我应该知道,所以我将在这里发布问题.

另一方面,如果这里只有PATH变量,它可以安全地作为副本关闭.

Gre*_*ler 5

你可以欺骗并使用where.exe命令

public GetFullPath(string program)
{
    string result;

    Process myProcess = new Process()
    {
        UseShellExecute = false,
        RedirectStandardOutput = true,
        StartInfo = new ProcessStartInfo(@"%SYSTEMDIR%\where.exe" )
    };

    using (StreamReader sr = myProcess.StandardOutput)
    {
        myProcess.Start();
        result = myStreamReader.ReadLine();
        myProcess.Close();
    }

    return result;
}
Run Code Online (Sandbox Code Playgroud)


jco*_*and 3

这取决于程序如何在系统中注册。由于 hg 通常从工具或命令行运行,因此它不会在系统中注册。如果是的话,就会有一组包含 exe 名称和路径的注册表项。否则,您只需迭代从第一个条目到最后一个条目的路径,直到找到所需的文件。路径上第一个找到的获胜。

这种“注册”程序的示例有 excel 或 winword。

编辑:

@BillyONeal 在下面提出了一个很好的观点,它只适用于“运行”命令程序,但我的观点是还有第二个地方可以看。

此外,对于那些还没有见过这个的人,这里是安装过程

对某些人来说更有效的替代方案是在 PATH 上搜索 hg