修改系统环境变量

本文详细阐述了如何通过注册表操作修改系统环境变量,重点在于使用TRegistry组件实现对特定位置环境变量的读取、修改及更新,特别讨论了在添加环境变量时遇到的问题及解决方案。
use Registry;


function TForm1.PATH() : Boolean;
var
  reg : TRegistry;
  sLMKey, sCurStr, sStrToAdd, sName, z: string;
begin
  sLMKey := 'System\CurrentControlSet\Control\Session Manager\Environment';  //环境变量保存在注册表的这个位置
  sName := 'PATH'; //我们要修改的是Path环境变量
  sStrToAdd := '%JAVA_HOME%\bin'; //要添加的环境变量
  reg := TRegistry.Create;
  //try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    sCurStr := reg.ReadString(sName);
    z := sCurStr + ';' + sStrToAdd;

    if reg.OpenKey(sLMKey,False) then
    begin
      //判断此键是否已经存在
      if reg.ValueExists(sName) then
        begin
          if sCurStr = z then
            begin
              Exit;
              Result := True;
            end
          else
            begin
              sCurStr := reg.ReadString(sName); //读取环境变量
                //Memo1.Lines.Add(sCurStr);
              //判断此环境变量是否已经存在

              sCurStr := sCurStr + ';' + sStrToAdd;  //把'C:/Ora_Cli/bin'这个值加入到环境变量的最后

              {网上看到的方法都是用WriteString这个函数来写Path环境变量, 可是我用了就有问题
               用了这个函数后,系统对%systemroot%,这带%的变量就不翻译了,有很多命令如ping就不能用了,
               会说ping不是可执行命令等等,后来经高手提醒说:用WriteExpandString就没问题了。
               看了Delphi的帮助,有这么一句:
               Call WriteExpandString to store a string that contains unexpanded references to environment variables such as %PATH%
              }
              //reg.WriteString(sName,sCurStr);   //用这句就有问题
              reg.WriteExpandString(sName,sCurStr);  //把值写到注册表里
              reg.CloseKey;
              SetEnvironmentVariable(PChar(sName),PChar(sCurStr));//更新当前进程的环境变量
              SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,Integer(PChar('Environment'))); //通知所有上层窗口,环境参数变化
              reg.Free;
              Result := True;
              Exit;
            end;
        end;
    end;
    Result := False;
end;

修改系统环境变量  实则就是注册表的操作

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值