#c# #registry
#c# #реестр
Вопрос:
Я хотел бы прочитать оба, DisplayName
и InstallDate
для удаления реестра, но он показывает результат только для InstallDate
, как показать результат для обоих?
ManagementScope scope = new ManagementScope("\\.\root\CIMV2");
scope.Connect();
string softwareRegLoc = @"SoftwareMicrosoftWindowsCurrentVersionUninstall";
ManagementClass registry = new ManagementClass(scope, new ManagementPath("StdRegProv"), null);
ManagementBaseObject inParams = registry.GetMethodParameters("EnumKey");
inParams["sSubKeyName"] = softwareRegLoc;
// Read Registry Key Names
ManagementBaseObject outParams = registry.InvokeMethod("EnumKey", inParams, null);
string[] programGuids = outParams["sNames"] as string[];
foreach (string subKeyName in programGuids)
{
inParams = registry.GetMethodParameters("GetStringValue");
inParams["sSubKeyName"] = softwareRegLoc @"" subKeyName;
inParams["sValueName"] = "DisplayName";
inParams["sValueName"] = "InstallDate";
// Read Registry Value
outParams = registry.InvokeMethod("GetStringValue", inParams, null);
if (outParams.Properties["sValue"].Value != null)
{
Console.WriteLine($"Value: {outParams.Properties["sValue"].Value.ToString()}");
}
}
Комментарии:
1. Похоже, вы связываете оба с одним и тем же ключом
inParams[“sValueName”]
2. Я кое-что попробовал, смотрите Мой ответ. Это правильный или лучший способ?
Ответ №1:
У меня есть один способ, но это выглядит дублированием кода,
inParams["sValueName"] = "DisplayName";
// Read Registry Value
outParams = registry.InvokeMethod("GetStringValue", inParams, null);
if (outParams.Properties["sValue"].Value != null)
{
Console.WriteLine($"Value: {outParams.Properties["sValue"].Value.ToString()}");
}
inParams["sValueName"] = "InstallDate";
// Read Registry Value
outParams = registry.InvokeMethod("GetStringValue", inParams, null);
if (outParams.Properties["sValue"].Value != null)
{
Console.WriteLine($"Value: {outParams.Properties["sValue"].Value.ToString()}");
}
Есть ли другой способ?