как отобразить оба DisplayName и InstallDate, результат отображается только для InstallDate

#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()}");
            }
  

Есть ли другой способ?