由于需要实现机器的时间同步功能,要将"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。
     

解决方案 »

  1.   

    看看这个key的权限配置,有可能没有权限访问,需要先修改权限设置。
      

  2.   

    你跟踪一下代码执行了没,还有你手工修改注册表的位子是不是LocalMachine
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
      

  3.   

    回复一楼:    1、如何查看key的权限配置?本人是以Administrator登陆机器的;回复二楼:
       
        2、代码跟踪了,并执行了;位置是位于LocalMachine。