2014-01-31 3 views
0

Я новичок в C# и ища помощи.Список и удалить раздел реестра на C#

Я занимаюсь распространением программных пакетов с использованием функции Windows GPO. Иногда конкретным клиентам необходимо переустановить пакет, но, к сожалению, это невозможно контролировать с помощью редактора GPO по умолчанию. Вы можете инициировать повторное развертывание пакета, но он снова будет повторно установлен на всех клиентах.

Статус установки сохраняется в реестре клиентов. Каждый пакет имеет ключ к югу в этом месте:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\AppMgmt 

Собрать суб ключи удаленного компьютера в списке я следующее:

List<string> RegFolders = new List<string>(); 
string subKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\AppMgmt"; 
RegistryKey AppMgmtKey; 
RegistryKey AppKey; 

AppMgmtKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, remoteHost).OpenSubKey(subKey); 

foreach (string subKeyName in AppMgmtKey.GetSubKeyNames()) 
       { 
        RegFolders.Add(String.Join(",", subKeyName)); 
       } 

Я собираюсь добавить найденные значения в проверочный список. Поскольку ключи к югу названы в качестве уникальных идентификаторов, я собираюсь получить строковое значение каждого ключа к югу, который содержит описание продукта:

foreach (string DeplApp in RegFolders) 
{ 
    AppKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, remoteHost).OpenSubKey(GlobalVars.subKey + "\\" + DeplApp); 
    string DispName = (string)AppKey.GetValue("Deployment Name"); 
    cListBoxSubKeys.Items.Add(DispName); 
} 

До сих пор так хорошо, названия продуктов приведены в ListBox. Проблема у меня есть к следующему шагу, при попытке удалить проверенные продукты:

foreach (object itemChecked in cListBoxSubKeys.CheckedItems) 
{ 
    Registry.LocalMachine.DeleteSubKey(subKey + "\\" + itemChecked); 
} 

Это работает, если я хотел бы добавить уникальный идентификатор подраздела проверенному-ListBox. Но поскольку я добавляю название продукта, это, конечно, не работает. Есть ли простой способ удалить весь дополнительный ключ без необходимости перечислять идентификатор в списке-списке?

Благодарен за любой ввод!

ответ

0

Вы можете добавить любой объект проверяемого списка, а также указать, какое свойство класса для отображения:

cListBoxSubKeys.Items.Add(new { Name = DispName, ID = UniqueId }); 
cListBoxSubKeys.DisplayMember = "Name"; 
cListBoxSubKeys.ValueMember = "ID"; 

Тогда в другом случае, читать идентификатор обратно из:

foreach (object itemChecked in cListBoxSubKeys.CheckedItems) 
{ 
    var uniqueId = itemChecked.GetType().GetProperty("ID").GetValue(itemChecked, null); 

    Registry.LocalMachine.DeleteSubKey(subKey + "\\" + uniqueId); 
} 
+0

работает как шарм! Большое спасибо Грант! –

Смежные вопросы