2017-10-11 39 views
1

從不同的機器中,我導出了註冊表的不同分支。 (整個註冊表太大,拿的全部。)在C#中打開導出的註冊表

我已經保存在reg文件,這些註冊表我自己的機器上,到目前爲止,只檢查他們的明文。我不想用Regedit打開它們,因爲我不希望這些密鑰與我的機器的註冊表合併。

在我的C#應用​​程序,在試圖確定是否安裝一個軟件,我一直在研究我的機器現有的註冊表。

string REGISTRY_KEY = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; 
string REGISTRY_NAME = "Name of Software"; 
bool is64bit = true; 
RegistryView registryView = is64Bit ? RegistryView.Registry64 : RegistryView.Registry32; 
RegistryKey registryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, registryView).OpenSubKey(REGISTRY_KEY); 
if (registryKey != null) 
{ 
    using (registryKey) 
    { 
     foreach (string subkeyName in registryKey.GetSubKeyNames()) 
     { 
      using (RegistryKey subkey = registryKey.OpenSubKey(subkeyName)) 
      { 
       string displayName = (string)subkey.GetValue("DisplayName"); 
       if (displayName != null && displayName.Contains(REGISTRY_NAME)) 
       { 
        Console.WriteLine("Found the program"); 
       } 
      } 
     } 
    } 
} 

這在我的機器的HKLM的64位視圖內搜索。

不過,現在我想要運行相同的代碼,但不是用我的機器的註冊表文件,我想用導出的.reg文件,我有一個。 我從中導出的分支是HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion分支。

如何使用的RegistryKey工具用C#打開保存在我的機器上的註冊表文件(但不是爲我自己的機器的實際註冊表)?

回答

1

我很抱歉,但AFAIK有沒有辦法可以做到這一點與內置.net註冊功能;您將不得不構建自己的文本解析器或使用已經制作的文本解析器來獲取文件中的密鑰。

thisthis說同樣的事情; this project是一個註冊表分析器,在GitHub上有大約40顆星。

+0

順便說一句,你問這個問題已經差不多20天了;你有沒有想過別的嗎? –

+1

我很遺憾沒有找到解決方案。 – user2494584