通过代码

时间:2016-09-05 10:04:25

标签: c# regex postgresql registry registrykey

我想访问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");

但它仅适用于绝对注册表键路径。

有没有办法使用正则表达式来获取注册表子项?

1 个答案:

答案 0 :(得分:0)

在你的正则表达式中:

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

[64|86]表示:匹配64|86

将其更改为

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

获取6486位版本。

要枚举所有可能性,您可以使用以下代码:

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