string ResolveDirectory ( string dir )
{
if ( dir.StartsWith("%") && dir.EndsWith("%") ) {
var envVar = Environment.GetEnvironmentVariable( dir.Substring(1, dir.Length-2) );
if (envVar==null) {
Log.Warning(" {0} : environment variable not found", dir);
return null;
}
if (!Directory.Exists( envVar )) {
Log.Warning(" {0} = {1} : path not found", dir, envVar );
return null;
}
return envVar;
}
if ( dir.StartsWith("HKEY_") ) {
var keyValue = dir.Split(new[]{'@'}, 2);
var key = keyValue[0];
var value = keyValue.Length == 2 ? keyValue[1] : "";
var regValue = Registry.GetValue(key, value, null);
if (regValue==null) {
Log.Warning(" {0} : registry variable not found", dir);
return null;
}
if (!(regValue is string)) {
Log.Warning(" {0} : registry variable must be string", dir);
return null;
}
if (!Directory.Exists( (string)regValue )) {
Log.Warning(" {0} = {1} : path not found", dir, (string)regValue );
return null;
}
return (string)regValue;
}
if (Path.IsPathRooted( dir )) {
if (Directory.Exists( dir )) {
return dir;
}
} else {
var fullDir = Path.GetFullPath( dir );
if (Directory.Exists( fullDir )) {
return fullDir;
}
}
Log.Warning(" {0} : not resolved", dir);
return null;
}