如何用代码设置系统环境变量 比如path(200分)

  • 主题发起人 torrentwang
  • 开始时间
T

torrentwang

Unregistered / Unconfirmed
GUEST, unregistred user!
如何用代码设置系统环境变量 比如path

是不是 ExpandEnvironmentStrings

PATH加入路径是必须的一项。我要做其他事情,如注册文件之类,
哪位能环境变量上PATH能加上我的一个路径。
 
path:=extractfilepath(application.exename)
path:=extractfilepath(paramstr(0))
 
我的意思是要在path 中增加一个路径
C:/PROGRA~1/Borland/Delphi5/Projects/Bpl;
C:/PROGRA~1/Borland/vbroker/jre/Bin;
C:/PROGRA~1/Borland/vbroker/Bin;
C:/PROGRA~1/Borland/Delphi5/Bin;
C:/WINNT/system32;C:/WINNT;
C:/WINNT/System32/Wbem;
。。。。
再加入我的一个路径写入,用代码实现
 
不明白你究竟要干什么,
系统的路径、名称参数可以用“土土”的办法:
ExtractFilename、ExtractFilePath,Application.exename,ParamStr[0],
如果要对出册表操作,用TRegistry类,如:
procedure TForm1.WMEndSession(var Message: TWMEndSession);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey('/Software/Microsoft/Windows/CurrentVersion/RunOnce', True)
then Reg.WriteString('MyApp','"' + ParamStr(0) + '"');
finally
Reg.CloseKey;
Reg.Free;
inherited;
end;
end;
查一下帮助,有详细的解释
 
ExpandEnvironmentStrings是读取一个环境变量
环境变量存放在注册表中,
系统环境变量为:HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Control/Session Manager/Environment
当前用户的:HKEY_CURRENT_USER/Environment
 
不是对于注册表的操作
我想做的是系统环境变量设置
系统环境变量有一个path ,我们的系统路径全部包含再PATH中,我现在只是要在原来的
路径上再加上一个路径。
比如右击‘我的电脑’->属性—>高级-->环境变量—>path
添加一个路径,现在我需要用代码实现,如何做????
 
晕,那个值就是存在注册表里的啊,
你打开你的注册表看看,试试下面这段代码:
procedure TForm1.Button1Click(Sender: TObject);
var
Reg: TRegistry;
Path: String;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('SYSTEM/ControlSet001/Control/Session Manager/Environment', False);
Path := Reg.ReadString('Path');
if (Path <> '') and (Copy(Path, Length(Path), 1) <> ';') then
Path := Path + ';';
Path := Path + 'c:/mypath';
Reg.WriteString('Path', Path);
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey('Environment', False);
Path := Reg.ReadString('Path');
if (Path <> '') and (Copy(Path, Length(Path), 1) <> ';') then
Path := Path + ';';
Path := Path + 'c:/mylocalpath';
Reg.WriteString('Path', Path);
Reg.CloseKey;
finally
Reg.Free;
end;
end;
 
delphi 你好

HKEY_LOCAL_MACHINE/SYSTEM/下的
ControlSet001
ControlSet002
CurrentControlSet
等等有什么区别和作用

谢谢
 
CurrentControlSet当然是当前使用的controlset
controlset001, 002应该是系统内存在的两个不同的配置(纯属猜测)?
 
2000下确实是修改注册表,不过需要发一个消息,让修改立刻生效
下面程序可以指定该环境变量是只属于当前登陆者的还是所有本机用户的,他们写注册表的位置不同,你可以仔细看一下代码,就清楚了。
{*********************************************}
{ Set Global Environment Function }
{ Coder : Kingron,2002.8.6 }
{ Bug Report : Kingron@163.net }
{ Test OK For Windows 2000 Advance Server }
{ Parameter: }
{ Name : environment variable name }
{ Value: environment variable Value }
{ Ex: SetGlobalEnvironment('MyVar','OK') }
{*********************************************}

function SetGlobalEnvironment(const Name, Value: string;
const User: Boolean = True): Boolean;
resourcestring
REG_MACHINE_LOCATION = 'System/CurrentControlSet/Control/Session Manager/Environment';
REG_USER_LOCATION = 'Environment';
begin
with TRegistry.Create do
try
if User then { User Environment Variable }
Result := OpenKey(REG_USER_LOCATION, True)
else { System Environment Variable }
begin
RootKey := HKEY_LOCAL_MACHINE;
Result := OpenKey(REG_MACHINE_LOCATION, True);
end;
if Result then
begin
WriteString(Name, Value); { Write Registry for Global Environment }
{ Update Current Process Environment Variable }
SetEnvironmentVariable(PChar(Name), PChar(Value));
{ Send Message To All Top Window for Refresh }
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, Integer(PChar('Environment')));
end;
finally
Free;
end;
end; { SetGlobalEnvironment }
 
直接用SetEnvironmentVariable这个api函数就可以呀。
 
用SetEnvironmentVariable好像不行。
 
退出程序设置的环境变量不能保存,但在程序内部是可以的呀,我这样用过的。
你是怎么写的?
 
多人接受答案了。
 
顶部