Tanto meu colega quanto eu estamos depurando um programa C++ em nossos respectivos computadores Win11.
Nós dois temos uma variável de ambiente em nosso System Properties->Environment Variables->System Variables MYAPP_USER_DIR %USERPROFILE%\myapp
.
No meu sistema, em cmd.exe,
C:\Users\me>echo %USERPROFILE%
C:\Users\me
C:\Users\me>echo %MYAPP_USER_DIR%
C:\windows\system32\config\systemprofile\myapp
Eu nem entendo isso: %USERPROFILE% expandido para algo diferente do valor de USERPROFILE, sobre o qual também estou curioso.
Para meu colega de trabalho, no entanto,
C:\Users\him>echo %MYAPP_USER_DIR%
%USERPROFILE%\myapp
Não é expandido em tudo. Por que não?
Além disso, quando meu colega de trabalho reiniciou, agora está definido! Por que???
C:\Users\him>echo %TIMELIKE_USER_DIR%
C:\Users\him\myapp
Parece que um de vocês executa o software em desenvolvimento ou o executável que ele gera com privilégios administrativos.
Isso significa que o programa é executado como administrador e que a variável %userprofile% é o padrão: c:\Windows\system32. No seu exemplo dá c:\windows\system32\config\systemprofile que seria uma indicação de que o programa não é apenas iniciado como administrador, mas o usuário do SISTEMA mesmo.
A única maneira de evitar isso é não executar o programa em um modo elevado. Isso também significa que você não pode executar como um serviço.
Quanto à atualização das variáveis ambientais do sistema, você precisa escrever isso no buffer do sistema e reiniciar o programa para poder lê-lo novamente. É provável que você tenha testado tantas vezes que realmente executou essa reinicialização sem saber que era necessário corrigi-lo.