У меня есть корневая папка с именем реестра MyApp
, внутри у нас много записей, как показано ниже. Мне нужно перейти к каждой подзаписи и получить некоторые данные реестра.
var registryValue = GetRegistryValue(managementScope, "SOFTWARE\\MyApp\\app1", "Version", ipAdd, username, password);
var registryValue = GetRegistryValue(managementScope, "SOFTWARE\\MyApp\\app2", "Version", ipAdd, username, password);
var registryValue = GetRegistryValue(managementScope, "SOFTWARE\\MyApp\\app3", "Version", ipAdd, username, password);
Поддерживаемые методы для получения значения реестра с использованием WMI
,
public static string GetRegistryValue(ManagementScope managementScope, string subRegistryPath, string subRegistryKey, string assetNameOrIpAddress, string username, string password)
{
string value = string.Empty;
//get the value from default view
object registryValue = GetValue(managementScope, subRegistryPath, subRegistryKey);
if (registryValue != null)
{
value = registryValue.ToString();
}
else
{
//change the registry view to 64
managementScope.Options.Context.Add("__ProviderArchitecture", 64);
managementScope.Options.Context.Add("__RequiredArchitecture", true);
//again try to get the value
registryValue = GetValue(managementScope, subRegistryPath, subRegistryKey);
if (registryValue != null)
{
value = registryValue.ToString();
}
}
return value;
}
private static object GetValue(ManagementScope managementScope, string subKeyName, string valueName)
{
using (ManagementClass registry = new ManagementClass(managementScope, new ManagementPath("StdRegProv"), null))
{
ManagementBaseObject inParams = registry.GetMethodParameters("GetStringValue");
inParams["sSubKeyName"] = subKeyName;
inParams["sValueName"] = valueName;
return registry.InvokeMethod("GetStringValue", inParams, null).Properties["sValue"].Value;
}
}
То, что я хочу сначала проверить, если корневое имя реестра MyApp
недоступно, я хочу отменить все вызовы реестра моего подключа. Это возможно?
Когда я делаю GetRegistryValue(managementScope, "SOFTWARE", "MyApp", ipAdd, username, password)
, я получаю пустое значение, даже корневая запись реестра MyApp
доступна для компьютера. Что здесь не так?
if(GetRegistryValue(managementScope, "SOFTWARE", "MyApp", ipAdd, username, password) is available)
then
var registryValue = GetRegistryValue(managementScope, "SOFTWARE\\MyApp\\app1", "Version", ipAdd, username, password);
var registryValue = GetRegistryValue(managementScope, "SOFTWARE\\MyApp\\app2", "Version", ipAdd, username, password);
var registryValue = GetRegistryValue(managementScope, "SOFTWARE\\MyApp\\app3", "Version", ipAdd, username, password);