我和我的同事都在我们各自的 Win11 计算机上调试 C++ 程序。
我们的 System Properties->Environment Variables->System Variables 都有一个环境变量MYAPP_USER_DIR %USERPROFILE%\myapp
。
在我的系统上,在 cmd.exe 中,
C:\Users\me>echo %USERPROFILE%
C:\Users\me
C:\Users\me>echo %MYAPP_USER_DIR%
C:\windows\system32\config\systemprofile\myapp
我什至不明白这一点:%USERPROFILE% 扩展到 USERPROFILE 的值以外的东西,我也很好奇。
不过,对于我的同事来说,
C:\Users\him>echo %MYAPP_USER_DIR%
%USERPROFILE%\myapp
它根本没有扩展。为什么不?
此外,当我的同事重新启动时,它现在已设置!为什么???
C:\Users\him>echo %TIMELIKE_USER_DIR%
C:\Users\him\myapp
似乎你们中的一个人以管理权限运行开发软件或它生成的可执行文件。
这意味着程序以管理员身份运行,这意味着 %userprofile% 变量是默认值:c:\Windows\system32。在您的示例中,它给出了 c:\windows\system32\config\systemprofile 这将表明该程序不仅以管理员身份启动,而且甚至以 SYSTEM 用户身份启动。
避免这种情况的唯一方法是不在提升模式下运行程序。这也意味着您不能作为服务运行。
至于更新系统环境变量,您需要将其写入系统缓冲区,然后重新启动程序才能将其读回。您可能已经测试了足够多的时间,以至于您实际上执行了重新启动,却不知道修复它是必要的。