none
чтение (default) из реестра RRS feed

  • Вопрос

  • Добрый день!

    для полного и правильного составления списка ПО на хосте

    необходимо чтение значения (по умолчанию) как к нему достучатся?

               

                fortxt[sh] = "Установленный софт";
                sh++;
                fortxt[sh] = "===================";
                sh++;
                try
                {
                    RegistryKey key = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, maskedTextBox1.Text
    ).OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall");
    
                    string[] skeys = key.GetSubKeyNames(); 
                    int length = skeys.Length;
                    progressBar1.Maximum = skeys.Length;
                    for (int i = 0; i < length; i++)
                    {
                        RegistryKey appKey = key.OpenSubKey(skeys[i]);
                        string name;
    
                        try 
                        {
                            name = appKey.GetValue("DisplayName").ToString();
                            fortxt[sh] = name;
                            sh++;
                            progressBar1.Value = i;
                        }
                        catch (Exception)
                        {
                            //name = appKey.GetValue("").ToString();здесь надо считать значение "По умолчанию"
                            
                            continue;
                        }
                        appKey.Close();
                    }
                    textBox1.Lines = fortxt;
                }
    
                catch (Exception s)
                {
                    MessageBox.Show(s.Message);
                }
            }
    
    
    

     

    28 октября 2011 г. 16:34

Ответы

  • По большому счету можно обойти если использовать чтение массива данных через WMI Win32_Registryр + возможность явно указать альтернативное имя пользователя.

    Вот только инфы по этому вопросу нормальной не нашел, как правильно подключится  к удаленному реестру.

    Если есть у кого рабочие коды подключения поделитесь инфой как прочитать значения удаленного реестра используя альтернативного юзера

    ManagementScope ms = new ManagementScope(@"\\" + machineName + @"\root\CIMV2", options);
                SelectQuery msQuery = new SelectQuery("SELECT * FROM Win32_Registry");
                ManagementObjectSearcher searchProcedure = new ManagementObjectSearcher(ms, msQuery);
    
                foreach (ManagementObject item in searchProcedure.Get())
                {
                    propertiesHolder.Caption = item["Caption"].ToString();
                    propertiesHolder.CurrentSize = item["CurrentSize"].ToString();
                    propertiesHolder.Description = item["Description"].ToString();
                    propertiesHolder.InstallDate = item["InstallDate"].ToString();
                    propertiesHolder.MaximumSize = item["MaximumSize"].ToString();
                    propertiesHolder.Name = item["Name"].ToString();
                    propertiesHolder.ProposedSize = item["ProposedSize"].ToString();
                    propertiesHolder.Status = item["Status"].ToString();
                }
    

     

    • Помечено в качестве ответа Abolmasov Dmitry 1 ноября 2011 г. 6:17
    29 октября 2011 г. 7:37
    • Помечено в качестве ответа Abolmasov Dmitry 1 ноября 2011 г. 6:17
    30 октября 2011 г. 8:43
    Модератор

Все ответы

  • По большому счету можно обойти если использовать чтение массива данных через WMI Win32_Registryр + возможность явно указать альтернативное имя пользователя.

    Вот только инфы по этому вопросу нормальной не нашел, как правильно подключится  к удаленному реестру.

    Если есть у кого рабочие коды подключения поделитесь инфой как прочитать значения удаленного реестра используя альтернативного юзера

    ManagementScope ms = new ManagementScope(@"\\" + machineName + @"\root\CIMV2", options);
                SelectQuery msQuery = new SelectQuery("SELECT * FROM Win32_Registry");
                ManagementObjectSearcher searchProcedure = new ManagementObjectSearcher(ms, msQuery);
    
                foreach (ManagementObject item in searchProcedure.Get())
                {
                    propertiesHolder.Caption = item["Caption"].ToString();
                    propertiesHolder.CurrentSize = item["CurrentSize"].ToString();
                    propertiesHolder.Description = item["Description"].ToString();
                    propertiesHolder.InstallDate = item["InstallDate"].ToString();
                    propertiesHolder.MaximumSize = item["MaximumSize"].ToString();
                    propertiesHolder.Name = item["Name"].ToString();
                    propertiesHolder.ProposedSize = item["ProposedSize"].ToString();
                    propertiesHolder.Status = item["Status"].ToString();
                }
    

     

    • Помечено в качестве ответа Abolmasov Dmitry 1 ноября 2011 г. 6:17
    29 октября 2011 г. 7:37
  • Значение по умолчанию - GetValue(""). Если вычитывает не то, что ожидалось - поменяй значение RegistryView, 3-й параметр в OpenRemoteBaseKey.
    30 октября 2011 г. 8:41
    Модератор
    • Помечено в качестве ответа Abolmasov Dmitry 1 ноября 2011 г. 6:17
    30 октября 2011 г. 8:43
    Модератор
  • Username/Password можно задать в options.

    http://msdn.microsoft.com/ru-ru/library/system.management.connectionoptions(v=VS.100).aspx

     


    Пока пришлось считывать установленный софт через WMI \\root\CIMV2  SELECT * FROM Win32_Product

    только есть большой и жирный минус установка соединения очень долгое в районе 15 секунд

    Подключение к хостам в домене нормальное, а вот к хостам не в домене подключиться не могу "доступ запрещен"

    Скачал даже WMICodeCreator попробовал подключиться с помощью данной проги - результат доступ запрещен изменения опций типа подключений kerb или ntlm эффекта не дает.

    Думаю уйти назад на чтение удаленного рееста через RegistryKey.OpenRemoteBaseKey

    31 октября 2011 г. 3:08
  • Как сменить пользователя для RegistryKey.OpenRemoteBaseKey? искал в доке не нашел

    для wmi есть connectionOption а что есть для RegistryKey?

    31 октября 2011 г. 11:01
  • Здравсвтуйте.

    Попробуйте посмотреть статью A Complete Impersonation Demo in C#.NET и обсуждение Edit registry key of other user. Надеюсь они вам помогут.


    Для связи [mail]
    1 ноября 2011 г. 6:16