如何更改环境变量并让其他应用程序在不注销的情况下查看该值?

roc*_*ady 1 delphi environment-variables delphi-10-seattle

我在Windows7 64位机器上使用Delphi 10 Seattle.

这是问题所在:

为了为我的软件创建测试环境,我创建了一个小应用程序,将环境变量添加到Windows注册表下

HKEY_CURRENT_USER\Environment
Run Code Online (Sandbox Code Playgroud)

我在我的包和主项目的搜索路径中使用这些变量,以便能够将项目设置提交到源代码控制中,并轻松地从生产切换到测试分支等...

现在,问题是,在创建环境变量之后,Delphi不会更新其"内部系统变量存储"

Tools --> Options --> Environment Variables
Run Code Online (Sandbox Code Playgroud)

而且项目没有编译.

即使重新启动Delphi也没有带来预期的效果.我必须完全重启Windows才能使其正常工作.

有没有办法在我的应用程序中更新Delphi中的系统变量?我错过了别的什么吗?

非常感谢!

Uwe*_*abe 6

我在本篇博文中描述的Path Compressor中做了类似的事情.相关方法是这样的:

procedure TPathCompressor.NotifyChanges;
{ Sending a WM_SETTINGCHANGE message to all top level windows. Otherwise the new environment variables
  will only be visible after logoff/logon. }
begin
  {$IFDEF DEBUG}
  Exit;
  {$ENDIF}
  SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, NativeInt(PChar('Environment')), SMTO_ABORTIFHUNG, 5000, nil);
end;
Run Code Online (Sandbox Code Playgroud)