遍歷注冊(cè)表需要注意的是:本機(jī)的系統(tǒng)是32位還64位, 那么程序也要相應(yīng)的是32位或者64位, 否則在讀取注冊(cè)表的時(shí)候會(huì)出現(xiàn)讀取子項(xiàng)不全的問(wèn)題。本人是使用遞歸的方式來(lái)讀取注冊(cè)表,由于是剛學(xué)的C#, 有什么不對(duì)的請(qǐng)包含指出,謝謝!純屬學(xué)習(xí)記錄, 大神請(qǐng)繞過(guò)!
private void TraversingRegistry(RegistryKey registryKey, string keyword , ref string path)
{
string[] values = registryKey.GetSubKeyNames();
foreach (var valueName in values)
{
try
{
RegistryKey subKey = registryKey.OpenSubKey(valueName, false);
bool bRet = TraversingChildNode(subKey, keyword, ref path);
if(bRet)
{
break;
}
}
catch(System.Exception ex)
{
continue;
}
}
}
private bool TraversingChildNode(RegistryKey registryKey, string keyword, ref string path)
{
bool bRet = false;
bRet = TraversingParentNode(registryKey, keyword, ref path);
if(bRet)
{
return bRet;
}
if (registryKey != null)
{
string[] values = registryKey.GetSubKeyNames();
foreach (var valueName in values)
{
try
{
RegistryKey subKey = registryKey.OpenSubKey(valueName, false);
System.Diagnostics.Debug.WriteLine(subKey.Name);
bRet = TraversingChildNode(subKey, keyword, ref path);
if(bRet)
{
break;
}
}
catch (System.Exception ex)
{
continue;
}
}
}
return bRet;
}
private bool TraversingParentNode(RegistryKey registryKey, string keyword, ref string path)
{
bool bRet = false;
if (registryKey != null)
{
string[] values1 = registryKey.GetValueNames();
string[] values = registryKey.GetSubKeyNames();
foreach (var valueName in values)
{
try
{
RegistryKey subKey = registryKey.OpenSubKey(valueName, false);
System.Diagnostics.Debug.WriteLine(subKey.Name);
if (subKey.Name.Contains(keyword))
{
path = subKey.GetValue("path", true).ToString(); //獲取值數(shù)據(jù)
path += "WINPROJ.EXE";
bRet = true;
break;
}
}
catch (System.Exception ex)
{
continue;
}
}
}
return bRet;
}
調(diào)用代碼:
string path = "";
TraversingRegistry(Registry.LocalMachine, @"Project\InstallRoot", ref path);
幾個(gè)逐漸反別對(duì)應(yīng):
//
// 摘要:
// 定義文檔的類(lèi)型(或類(lèi))以及與那些類(lèi)型關(guān)聯(lián)的屬性。該字段讀取 Windows 注冊(cè)表基項(xiàng) HKEY_CLASSES_ROOT。
public static readonly RegistryKey ClassesRoot;
//
// 摘要:
// 包含有關(guān)非用戶(hù)特定的硬件的配置信息。該字段讀取 Windows 注冊(cè)表基項(xiàng) HKEY_CURRENT_CONFIG。
public static readonly RegistryKey CurrentConfig;
//
// 摘要:
// 包含有關(guān)當(dāng)前用戶(hù)首選項(xiàng)的信息。該字段讀取 Windows 注冊(cè)表基項(xiàng) HKEY_CURRENT_USER
public static readonly RegistryKey CurrentUser;
//
// 摘要:
// 包含動(dòng)態(tài)注冊(cè)表數(shù)據(jù)。該字段讀取 Windows 注冊(cè)表基項(xiàng) HKEY_DYN_DATA。
//
// 異常:
// T:System.ObjectDisposedException:
// 操作系統(tǒng)不支持動(dòng)態(tài)數(shù)據(jù),即操作系統(tǒng)非 Windows 98、Windows 98 Second Edition 或 Windows Millennium
// Edition。
[Obsolete("The DynData registry key only works on Win9x, which is no longer supported by the CLR. On NT-based operating systems, use the PerformanceData registry key instead.")]
public static readonly RegistryKey DynData;
//
// 摘要:
// 包含本地計(jì)算機(jī)的配置數(shù)據(jù)。該字段讀取 Windows 注冊(cè)表基項(xiàng) HKEY_LOCAL_MACHINE。
public static readonly RegistryKey LocalMachine;
//
// 摘要:
// 包含軟件組件的性能信息。該字段讀取 Windows 注冊(cè)表基項(xiàng) HKEY_PERFORMANCE_DATA。
public static readonly RegistryKey PerformanceData;
//
// 摘要:
// 包含有關(guān)默認(rèn)用戶(hù)配置的信息。該字段讀取 Windows 注冊(cè)表基項(xiàng) HKEY_USERS。
public static readonly RegistryKey Users;
另外在C#中使用本地程序本地程序打開(kāi)一個(gè)本地文件頁(yè)是非常方便的,如:
System.Diagnostics.Process.Start("notepad.exe", @"C:\11.txt");
System.Diagnostics.Process.Start("WINPROJ.EXE", @"C:\test.mpp");