扫描Java可执行文件

时间:2013-11-23 00:55:51

标签: c# file for-loop directory

我希望我的程序扫描用户的硬盘驱动器以获取java.exe。

我正在考虑使用for循环,然后浏览每个目录,然后检查目录名称是否与我设置的目录名称相匹配,然后检查java exe的那些,但我确定有很多更有效的方式。

有关如何处理此事的任何想法?

编辑:

我已经完成了一些foreach循环,但它并没有太顺利。我可能错过了一些东西:

// Scan for Java executable (java.exe)
        foreach (String dir in Directory.GetDirectories("C:/"))
        {
            if (dir == "Program Files")
            {
                foreach (String _dir in Directory.GetDirectories(dir)) {
                    if (_dir == "Java")
                    {
                        foreach (String javaDir in Directory.GetDirectories(_dir))
                        {
                            if (javaDir == "jre7")
                            {
                                foreach (String binDir in Directory.GetDirectories(javaDir)) {
                                    if (binDir == "bin")
                                    {
                                        foreach (String file in Directory.GetFiles(binDir))
                                        {
                                            if (file == "java.exe")
                                            {
                                                javaExe = file;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

2 个答案:

答案 0 :(得分:1)

您是否只想查看java.exe是否在那里?

File.Exists(@"C:\Program Files\Java\jre7\bin\java.exe")

如果需要,您可能需要其他逻辑来查看Program Files (x86)文件夹。如果用户在其他地方安装了java,这显然也会失败。

如果您想知道java的位置,请查看this other Stack Overflow post

答案 1 :(得分:0)

您正在寻找java.exe。所以 首先,您应该查找oracle始终安装它的java.exe的目录 应该在

  

C:\ Windows \ System32下

限制搜索,然后搜索其他目录。

         var paths = new List<string>
        {
           Environment.SystemDirectory,
           Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)+@"\java",
           Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)+@"\java",
           Environment.GetFolderPath(Environment.SpecialFolder.Programs)+@"\java"
           //C:\
           //rest
        };
        foreach (string path in paths)
        {
            var ser = Search("java.exe", path);

            if (!string.IsNullOrEmpty(ser))
            {
                if (File.Exists(ser))
                {
                    javaExe = ser;
                    break;
                }
            }
        }

搜索功能:

 private static string Search(string pattern, string root)
    {
        if (!Directory.Exists(root))
        {
            return string.Empty;
        }
        var paths = new Queue<string>();
        paths.Enqueue(root);
        while (paths.Count > 0)
        {
            root = paths.Dequeue();
            string[] temp = Directory.GetFiles(root, pattern);
            foreach (string t in temp)
            {
                return t;
            }
            temp = Directory.GetDirectories(root);
            foreach (string t in temp)
            {
                paths.Enqueue(t);
            }
        }

        return string.Empty;
    }

此外,最好使用this搜索方法来避免访问权限。

注意: 你可以在多个地方找到java.exe。