由于需要实现机器的时间同步功能,要将"SYSTEM\\CurrentControlSet\\Services\\w32time\\Config"下面的项AnnounceFlags(类型:REG_DWORD),修改成5,尝试了以下两种方法: private const string REG_TIME_CONFIG = "SYSTEM\\CurrentControlSet\\Services\\w32time\\Config"; 一、直接修改: ModifyRegedit(REG_TIME_CONFIG, "AnnounceFlags", 0x00000005, RegistryValueKind.DWord);
private static void ModifyRegedit(string keyPath,string keyName,object keyValue,RegistryValueKind rvk)
{
try
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(keyPath,true);
key.SetValue(keyName, keyValue,rvk); AppendLog(string.Format("注册表值:" + "{0}" + "\0\0\0" + "修改成:" + "{1}" + "\0\0\0" + "成功!", keyName, keyValue));
}
catch (Exception exp)
{
AppendLog(string.Format("{0}" + "\n\r" + "{1}", exp, exp.Message));
}
} 修改后,无异常,但打开注册表,AnnounceFlags的值总是为a (十六进制,十进制的话为10); 二、删除以后,新建: DeleteRegedit(REG_TIME_CONFIG, "AnnounceFlags"); CreateRegedit(REG_TIME_CONFIG, "AnnounceFlags", 0x05, RegistryValueKind.DWord); private static void DeleteRegedit(string keyPath, string keyName)
{
try
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(keyPath,true);
key.DeleteValue(keyName, true);
AppendLog(string.Format("删除注册表项:{0} 成功!",keyName));
}
catch (Exception exp)
{
AppendLog(string.Format("{0}" + "\n\r" + "{1}", exp, exp.Message));
}
} private static void CreateRegedit(string keyPath,string keyName, object keyValue,RegistryValueKind rvk)
{
try
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(keyPath, true);
//key.CreateSubKey("", RegistryKeyPermissionCheck.ReadWriteSubTree);
key.SetValue(keyName, keyValue, rvk); AppendLog(string.Format("新增注册表项:" + "{0}" + "\0\0\0" + "值:" + "{1}" + "\0\0\0" + "成功!", keyName, keyValue));
}
catch (Exception exp)
{
AppendLog(string.Format("{0}" + "\n\r" + "{1}", exp, exp.Message));
}
} 无异常抛出,但情况跟上面一样,修改不成功; 尝试过RegistryValueKind的其它类型,也不行; 手工修改直接输入5,是成功的,重新打开注册表也是5。
private static void ModifyRegedit(string keyPath,string keyName,object keyValue,RegistryValueKind rvk)
{
try
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(keyPath,true);
key.SetValue(keyName, keyValue,rvk); AppendLog(string.Format("注册表值:" + "{0}" + "\0\0\0" + "修改成:" + "{1}" + "\0\0\0" + "成功!", keyName, keyValue));
}
catch (Exception exp)
{
AppendLog(string.Format("{0}" + "\n\r" + "{1}", exp, exp.Message));
}
} 修改后,无异常,但打开注册表,AnnounceFlags的值总是为a (十六进制,十进制的话为10); 二、删除以后,新建: DeleteRegedit(REG_TIME_CONFIG, "AnnounceFlags"); CreateRegedit(REG_TIME_CONFIG, "AnnounceFlags", 0x05, RegistryValueKind.DWord); private static void DeleteRegedit(string keyPath, string keyName)
{
try
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(keyPath,true);
key.DeleteValue(keyName, true);
AppendLog(string.Format("删除注册表项:{0} 成功!",keyName));
}
catch (Exception exp)
{
AppendLog(string.Format("{0}" + "\n\r" + "{1}", exp, exp.Message));
}
} private static void CreateRegedit(string keyPath,string keyName, object keyValue,RegistryValueKind rvk)
{
try
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(keyPath, true);
//key.CreateSubKey("", RegistryKeyPermissionCheck.ReadWriteSubTree);
key.SetValue(keyName, keyValue, rvk); AppendLog(string.Format("新增注册表项:" + "{0}" + "\0\0\0" + "值:" + "{1}" + "\0\0\0" + "成功!", keyName, keyValue));
}
catch (Exception exp)
{
AppendLog(string.Format("{0}" + "\n\r" + "{1}", exp, exp.Message));
}
} 无异常抛出,但情况跟上面一样,修改不成功; 尝试过RegistryValueKind的其它类型,也不行; 手工修改直接输入5,是成功的,重新打开注册表也是5。
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
2、代码跟踪了,并执行了;位置是位于LocalMachine。