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

How can I change an environment variable and have other apps see the value without logging out?

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

这是问题所在:

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

HKEY_CURRENT_USER\Environment

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

现在的问题是,在创建环境变量后,Delphi 没有更新它在

下的 "internal System Variable store"
Tools --> Options --> Environment Variables

并且项目无法编译。

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

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

非常感谢!

我正在 this blog post 中描述的路径压缩器中做类似的事情。相关方法是这个:

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;