某些程序必須依賴指定運行環境。那麼讀取註冊表來判斷此電腦是否有執行環境是個很不錯的辦法。因爲每個軟件安裝之後都會在註冊表中註冊對應的鍵值,並且有些鍵值是獨一無二的。那麼首先就需要找到那個具體的獨一無二的鍵值,以便程序在運行之前能夠去讀取以判斷。代碼如下:
class Program
{
private static string _sValue = string.Empty;
static void Main(string[] args)
{
Console.WriteLine("請輸入待查找值:");
_sValue = Console.ReadLine();
Console.WriteLine($"正在查詢。。。");
var registryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,
Environment.Is64BitOperatingSystem ? RegistryView.Registry64 : RegistryView.Registry32); //判斷機器位數
int i = 0;
GetKeyNames(registryKey, ref i);
Console.WriteLine($"查詢結束。。。");
Console.ReadKey();
}
/// <summary>
/// 遍歷所有子項
/// </summary>
/// <param name="subkey">節點</param>
/// <param name="i"></param>
private static void GetKeyNames(RegistryKey subkey, ref int i)
{
foreach (var subkey_name in subkey.GetSubKeyNames()) // 檢索包含所有子項名稱的字符串數組
{
try
{
using (RegistryKey csubkey = subkey.OpenSubKey(subkey_name))
{
GetValueName(csubkey, ref i);
GetKeyNames(csubkey, ref i);
}
}
catch { }
}
}
/// <summary>
/// 若包含輸入值則輸出記錄
/// </summary>
/// <param name="subkey">節點</param>
/// <param name="i"></param>
private static void GetValueName(RegistryKey subkey, ref int i)
{
foreach (var name in subkey.GetValueNames()) //檢索包含與此項關聯的所有值名稱的字符串數組
{
var sValue = subkey.GetValue(name) + string.Empty;
if (string.Compare(sValue, string.Format(@"{0}", _sValue, StringComparison.OrdinalIgnoreCase)) == 0)
{
Console.WriteLine(++i + "\t" + subkey.Name);
}
}
}
}
現在查找含有E:\ArcGIS\Python27\ArcGISx6410.2\python.exe的鍵:
結果如下: