自己手动修改添加环境变量遇到的问题(二)

  • 写注册表方式:

 下面是C# 代码,向注册表写入相应的值,来修改环境变量:

        private void WriteMainJavaPath2Reg(string strJAVAHome)
        {
            RegistryKey key = Registry.LocalMachine;
            RegistryKey software = null;

            //HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
            software = key.OpenSubKey("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment",true);
            string strPath = software.GetValue("Path").ToString();

            bool bTemp = strPath.EndsWith(";");//从字符串的最后位置开始查找是否有"这个符号
            if (bTemp)
            {
                strPath = strPath + strJAVAHome + "\\jre\\bin\\";
            }
            else
            {
                strPath = strPath + ";" + strJAVAHome + "\\jre\\bin\\";
            }

            software.SetValue("Path", strPath, RegistryValueKind.ExpandString);

            RegistryKey local_USER = Registry.CurrentUser;
            RegistryKey user_ev = null;

            user_ev = local_USER.OpenSubKey("Environment", true);
            if (user_ev == null)
            {
                user_ev = local_USER.CreateSubKey("Environment");
                user_ev.SetValue("PATH", strJAVAHome + "\\jre\\bin\\", RegistryValueKind.ExpandString);
            }
            else
            {
                string[] strEnvironmentNames = user_ev.GetValueNames();
                string strTemp = "";
                bool exists = ((System.Collections.IList)strEnvironmentNames).Contains("Path");
                if (exists)
                {
                    strTemp = user_ev.GetValue("PATH").ToString();
                }

                bTemp = strTemp.EndsWith(";");
                if (bTemp)
                {
                    strTemp = strTemp + strJAVAHome + "\\jre\\bin\\";
                }
                else
                {
                    if(strTemp.Length > 0)
                    {
                        strTemp = strTemp + ";" + strJAVAHome + "\\jre\\bin\\";
                    }
                    else
                    {
                        strTemp = strTemp  + strJAVAHome + "\\jre\\bin\\";
                    }
                }

                user_ev.SetValue("Path", strTemp, RegistryValueKind.ExpandString);
            }
        }

亲测,写注册表的方式在win10是不用重启电脑,修改后马上就可以使用,不过在win7,需要重启电脑,或者是打开windows 环境变量的窗口,点击一下确认,才可以使用。

其实,以上两种方式,都是写注册表的方式,因为set path,是当前工作环境临时有效。而后是无效的。

解决此问题的方法是: 新建一个windows 的c++ 程序,控制台的就好。

以下是此程序的全部代码,拿走不谢。

#include <windows.h>
int main()
{
	SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)TEXT("Environment"));
	return 0;
}

先写入环境变量的注册表,然后管理员运行此程序编译后的exe,那么环境变量就是立即生效了。上面这个程序的意思是,向所有windows桌面程序,发送环境变量发生改变的消息。

还有一种方法,可以直接就修改了环境变量,而不用另外写程序发送 WM_SETTINGCHANGE 消息。

欲知详情,请听下回讲解。关注我的博客哟,www.qq249191508.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chen249191508

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值