2016-09-05 2 views
0

Я хотел бы получить доступ к разделам реестра Postgresql (чтобы получить путь установки postgresql). Я знаю, что они расположены в:Доступ к разделу реестра, который соответствует регулярному выражению через код

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\postgresql-x64-9.5 

Для 64 разрядного компьютера с 9,5 PostGreSQL версии.

Теперь я хотел бы получить доступ к этому ключу с любого компьютера (32/64 бит) с другой установленной версией postgre (9.0, 9.1 ...). Путь может быть что-то вроде

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\postgresql-x[64|86]-9.[0-5] 

Стандартный способ доступа к реестру ключ в C# является следующая

Registry.LocalMachine.OpenSubKey("@"SYSTEM\CurrentControlSet\Services\postgresql-x64-9.5"); 

Но он работает только с абсолютным ключом реестра путь.

Есть ли способ использовать регулярные выражения для получения разделов реестра?

ответ

0

В своем регулярном выражении:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\postgresql-x[64|86]-9.[0-5] 

[64|86] означает: Совпадение 6, 4, |, 8 или 6.

Изменить его

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\postgresql-x(64|86)-9.[0-5] 

Чтобы получить 64 или 86 разрядную версию.


Чтобы перечислить все возможности, вы можете использовать этот код:

RegistryKey key = null; 

foreach (var version in new List<string>{"64" , "86"}) 
{ 
    for (int i = 0; i <= 5; i++) 
    { 
     key = Registry.LocalMachine.OpenSubKey(String.Format("SYSTEM\\CurrentControlSet\\Services\\postgresql-x{0}-9.{1}", version, i)); 
     if(key != null) 
      break; 
    } 
    if (key != null) 
     break; 
} 
// Do something with key 
+0

Да, вы правы, но это не суть моего вопроса. Я не могу использовать regexp с методом OpenSubKey, потому что для этого метода нужна только строка с абсолютным путем – Rowandish

+0

@Rowandish см. В edit –

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

  • Нет связанных вопросов^_^