我和我的同事都在各自的Win11电脑上调试一个C++程序。
我们的系统属性->环境变量->系统变量中都有一个环境变量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
答案1
看来你们中的一个人以管理员权限运行正在开发的软件或其生成的可执行文件。
这意味着程序以管理员身份运行,也意味着 %userprofile% 变量是默认变量:c:\Windows\system32。在您的示例中,它给出的是 c:\windows\system32\config\systemprofile,这表明程序不仅以管理员身份启动,甚至以 SYSTEM 用户身份启动。
避免这种情况的唯一方法是不要以提升模式运行该程序。这也意味着您无法以服务形式运行。
至于更新系统环境变量,您需要将其写入系统缓冲区,然后重新启动程序才能将其读回。您可能已经测试了足够多次,以至于您实际上执行了重新启动,而不知道这是修复该问题的必要条件。