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

被折叠的 条评论
为什么被折叠?



