我希望我的程序扫描用户的硬盘驱动器以获取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;
}
}
}
}
}
}
}
}
}
}
答案 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。