94 lines
2.2 KiB
C#
94 lines
2.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using Microsoft.Win32;
|
|
|
|
//This is stolen from MSBuild Community Tasks
|
|
static class ToolPathUtil
|
|
{
|
|
public static bool SafeFileExists(string path, string toolName)
|
|
{
|
|
return SafeFileExists(Path.Combine(path, toolName));
|
|
}
|
|
|
|
public static bool SafeFileExists(string file)
|
|
{
|
|
try { return File.Exists(file); }
|
|
catch { } // eat exception
|
|
|
|
return false;
|
|
}
|
|
|
|
public static string MakeToolName(string name)
|
|
{
|
|
return (Environment.OSVersion.Platform == PlatformID.Unix) ?
|
|
name : name + ".exe";
|
|
}
|
|
|
|
public static string FindInRegistry(string toolName)
|
|
{
|
|
try
|
|
{
|
|
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\" + toolName, false);
|
|
if (key != null)
|
|
{
|
|
string possiblePath = key.GetValue(null) as string;
|
|
if (SafeFileExists(possiblePath))
|
|
return Path.GetDirectoryName(possiblePath);
|
|
}
|
|
}
|
|
catch (System.Security.SecurityException) { }
|
|
|
|
return null;
|
|
}
|
|
|
|
public static string FindInPath(string toolName)
|
|
{
|
|
string pathEnvironmentVariable = Environment.GetEnvironmentVariable("PATH") ?? string.Empty;
|
|
string[] paths = pathEnvironmentVariable.Split(new[] { Path.PathSeparator }, StringSplitOptions.RemoveEmptyEntries);
|
|
foreach (string path in paths)
|
|
{
|
|
if (SafeFileExists(path, toolName))
|
|
{
|
|
return path;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public static string FindInProgramFiles(string toolName, params string[] commonLocations)
|
|
{
|
|
var trials = new[] { Environment.GetEnvironmentVariable("ProgramFiles(x86)"), Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) };
|
|
foreach (var t in trials)
|
|
{
|
|
if (t == null) continue;
|
|
foreach (string location in commonLocations)
|
|
{
|
|
string path = Path.Combine(t, location);
|
|
if (SafeFileExists(path, toolName))
|
|
{
|
|
return path;
|
|
}
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public static string FindInLocalPath(string toolName, string localPath)
|
|
{
|
|
if (localPath == null)
|
|
return null;
|
|
|
|
string path = new DirectoryInfo(localPath).FullName;
|
|
if (SafeFileExists(localPath, toolName))
|
|
{
|
|
return path;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|
|
|