static string GetStringValueFromRegistry(RegistryKey key, string valueName)
{
object val = key.GetValue(valueName);
if (val == null) return string.Empty;
RegistryValueKind kind = key.GetValueKind(valueName);
if (kind == RegistryValueKind.DWord ||
kind == RegistryValueKind.QWord ||
kind == RegistryValueKind.String)
{
return val.ToString();
}
else if (kind == RegistryValueKind.ExpandString)
{
return Environment.ExpandEnvironmentVariables(val as string);
}
else if (kind == RegistryValueKind.MultiString)
{
StringBuilder buf = new StringBuilder();
foreach (var s in val as string[])
{
buf.AppendFormat("{0}, ", s);
}
return buf.ToString();
}
else if (kind == RegistryValueKind.Binary)
{
StringBuilder buf = new StringBuilder();
foreach (var b in val as byte[])
{
buf.AppendFormat("{0:x2} ", b);
}
if (buf.Length > 0) buf.Remove(buf.Length - 1, 1);
return buf.ToString();
}
else return string.Empty;
}