Um das klarzustelen:
Die meisten WinAPIs lösen keine Umgebungsvariablen auf.
Viel schlimmer noch, denn "%irgendwas%" ist (in langen Pfadangaben, also nicht die alten 8.3-DOS-Pfade) ein korrekter Datei-/Verzeichnisname,
was dann gern darin endet, daß komische Programme gern mal Verzeichnisse mit solchen Dateinamen anlegen.
Und das Andere:
Jedes Programm (jeder Prozess) kann ein eigenes Set von Umgebungsvariablen besitzen.
Es bekommt es zwar meistens standardmäßig von deinem Aufrufer/Starter vererbt, aber der Prozess kann den Inhalt zur Laufzeit selber manipulieren, oder der Prozess bekomm beim Aufruf ein "anderes" Set mitgegeben.
In Delphi kennt man das z.B. als Delphi-Optionen > Umgebungsoptionen > Umgebungsvariablen > Vom Anwender überschrieben, welches dann für die
IDE und von der
IDE gestarteten Programmen gilt.
Und natürlich kann bei der Pfadbehandlung auch noch eine "manuelle" Behandlung von solchen "Variablen"-Platzhaltern implementiert sein, alternativ oder zusätzlich zu diesen Environment-Variablen.