1.RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment")
2.设置环境变量,判断是否存在XXXPATH键,没有时则加入XXXPATH键
3.修改XXXPATH键的值
4.将XXXPATH加入勤到path键,%XXXPATH%;%SYSTEMDIR%;...
5.RegCloseKey
6.SendMessageTimeout(HWND_BROADCAST,WM_SETTINGCHANGE,0,(LPARAM)"Environment",SMTO_ABORTIFHUNG,500,&dwDisposition);
7.查看我的电脑->属性->环境变量,显示设置正确!
至此,注册表的设置完成运行程序,将XXXPATH键设置为e:/temp/,重新启动系统,这时XXXPATH键已经存在,PATH确实是e:/temp/;c:\windows;...!
重新运行程序,选择了一个不同的XXXPATH键值,f:/swan/, 上述的步骤1-7被正确执行,使用命令行工具查看,PATH确实是f:/swan/;c:\windows;...!。
但是,
注销,重新登录,修改无效,PATH还是e:/temp/;c:\windows;...!!另外,查看注册表,HKEY_LOCAL_MACHIN\SYSTEM下只有一个ControlSet003,也就是说,只有一个windows帐户!请问各位大佬,有谁知道这是为什么吗?

解决方案 »

  1.   

    没有还原卡之烦扰东东,装了个卡巴!
    关键的问题是:
    HKEY_LOCAL_MACHINE\SYSTEM\之下,CurrentControlSet表示当前的设置,而ControlSet003表示的是第一个帐号的设置,这两个设置下的XXXPATH键的值是不一样的。于是,我试图使用regedit命令删除ControlSet003下的XXXPATH键,提示修改注册表成功!但是,注销当前帐号,重新登录这个帐号之后,ControlSet003下的XXXPATH键居然恢复到原来的值,太奇怪了!以上步骤的正常的结果,要么是ControlSet003下的XXXPATH键不存在,要么是ControlSet003下的XXXPATH键是新的值!
    今天,居然发现那台机器的PATH变量现在是期望的结果了,难道是关机的原因?关机时操作系统会将CurrentControlSet下的XXXPATH键自动复制到ControlSet003下,而注销不会???现在还是没搞明白!等开完会之后我会再按照这个思路调试调试
      

  2.   

    呵呵!自己搞定,关机时操作系统会将CurrentControlSet下的XXXPATH键自动复制到ControlSet003下,而注销不会!