谁知道用C#添加注册表后即时刷新生效,如何实现?

.Net技术 码拜 10年前 (2015-05-10) 1921次浏览 0个评论
 

我用C#语言操作注册表,某个节点下添加了一个DWord32位的值,值是添加进去了,但是要第二次执行了才生效,现在要做的就是添加后即时刷新,求各位大神支招!

5分
注册表的操作是立即生效的,建议LZ说明具体情况
5分
你存注册表是立即存进去的,生效与否在于读取注册表配置的程序的行为,又不是你能控制的。你能控制的话你也不会发帖问了。
引用 1 楼 bbjiabcd 的回复:

注册表的操作是立即生效的,建议LZ说明具体情况

第一次添加注册表后没有成功,第二次在运行程序注册表才写出成功,怎么回事

引用 2 楼 wjq 的回复:

你存注册表是立即存进去的,生效与否在于读取注册表配置的程序的行为,又不是你能控制的。你能控制的话你也不会发帖问了。

这是我添加的方法
private void WTRegedit(string name, Int32 tovalue) 
        {
            bool is64Bit=true;
            is64Bit = Environment.Is64BitOperatingSystem;
            RegistryKey hklm = Registry.LocalMachine;
            RegistryKey software;
            if (is64Bit)
            {
                software = hklm.OpenSubKey(@”SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION”, true);
                //RegistryKey aimdir = software.CreateSubKey(name);
            }
            else 
            {
                software = hklm.OpenSubKey(@”SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION”, true);
            }
            software.SetValue(name, tovalue, RegistryValueKind.DWord);
            //SHChangeNotify(0x8000000, 0, IntPtr.Zero, IntPtr.Zero);
            hklm.Close();
        }

5分
什么叫没有成功,值写进去了那就是成功了

是你的程序显示没有成功吧

你程序逻辑是什么,先读注册表,后写入吗

改成先写注册表,然后读,看能不能读到

引用 5 楼 Z65443344 的回复:

什么叫没有成功,值写进去了那就是成功了

是你的程序显示没有成功吧

你程序逻辑是什么,先读注册表,后写入吗

改成先写注册表,然后读,看能不能读到

我是在节点下直接添加的

引用 5 楼 Z65443344 的回复:

什么叫没有成功,值写进去了那就是成功了

是你的程序显示没有成功吧

你程序逻辑是什么,先读注册表,后写入吗

改成先写注册表,然后读,看能不能读到

我是先写后读的
if (!IsRegeditExit(name))//判断指定注册表项是否存在 
            {
                WTRegedit(name, tovalue_ie9);//添加应用程序的浏览器模式为ie9到注册表中
                //WTRegedit(name, tovalue_ie10);//添加应用程序的浏览器模式为ie10到注册表中
            }
            GetRegistData(name);//读取指定名称的注册表的值 

5分
是不是第一次没有用管理员身份运行?
5分
还是不明白你到底出了什么问题

把问题现象描述清楚

引用 9 楼 Z65443344 的回复:

还是不明白你到底出了什么问题

把问题现象描述清楚

我发截图给你吧

引用 9 楼 Z65443344 的回复:

还是不明白你到底出了什么问题

把问题现象描述清楚

问题描述
1.第一次运行程序显示如下
谁知道用C#添加注册表后即时刷新生效,如何实现?
注册表显示情况如下
谁知道用C#添加注册表后即时刷新生效,如何实现?
注册表中没有写入进去
2.第二次运行程序情况如下
谁知道用C#添加注册表后即时刷新生效,如何实现?
弹出的消息说明注册表已经写入成功了
注册表信息情况如下

10分
截图直接发帖子里,大家都看看

我估计别人也都没看懂你到底出现了什么问题了

到底注册表写进去了,你程序报错说没写进去
还是注册表根本就没写进去

引用 11 楼 u013189769 的回复:
Quote: 引用 9 楼 Z65443344 的回复:

还是不明白你到底出了什么问题

把问题现象描述清楚

问题描述
1.第一次运行程序显示如下
谁知道用C#添加注册表后即时刷新生效,如何实现?
注册表显示情况如下
谁知道用C#添加注册表后即时刷新生效,如何实现?
注册表中没有写入进去
2.第二次运行程序情况如下
谁知道用C#添加注册表后即时刷新生效,如何实现?
弹出的消息说明注册表已经写入成功了
注册表信息情况如下

补发一张截图
谁知道用C#添加注册表后即时刷新生效,如何实现?

引用 12 楼 Z65443344 的回复:

截图直接发帖子里,大家都看看

我估计别人也都没看懂你到底出现了什么问题了

到底注册表写进去了,你程序报错说没写进去
还是注册表根本就没写进去

我在想是不是要加个什么延迟之类的?

5分
这个应该不是你说的,你确定你在读取注册表之前写了注册表?是不是顺序出错了?
引用 15 楼 SmileSkyNet 的回复:

这个应该不是你说的,你确定你在读取注册表之前写了注册表?是不是顺序出错了?

没有啊

引用 15 楼 SmileSkyNet 的回复:

这个应该不是你说的,你确定你在读取注册表之前写了注册表?是不是顺序出错了?

我是先写后读的
if (!IsRegeditExit(name))//判断指定注册表项是否存在 
            {
                WTRegedit(name, tovalue_ie9);//添加应用程序的浏览器模式为ie9到注册表中
                //WTRegedit(name, tovalue_ie10);//添加应用程序的浏览器模式为ie10到注册表中
            }
            GetRegistData(name);//读取指定名称的注册表的值 

不太喜欢与系统有太多瓜葛

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明谁知道用C#添加注册表后即时刷新生效,如何实现?
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!