我想访问Postgresql注册表项(获取postgresql安装路径)。 我知道他们位于:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\postgresql-x64-9.5
对于具有9.5 postgresql版本的64位计算机。
现在我想从任何装有postgre的版本(9.0,9.1 ......)的任何PC(32/64位)访问此密钥。 路径可能类似于
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 :(得分: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