Nun, SysErrorMessage macht was genau? Einen String zurückgeben. Den zeigst du aber nicht an, daher weißt du gar nicht, ob da ein Fehler aufgetreten ist.
Davon abgesehen glaube ich nicht, dass das Setzen von Umgebungsvariablen so gedacht ist und dein Programm würde sofort von meiner Platte fliegen, wenn es irgendwo in der Registry rumschreibt bei sowas flüchtigem wie Umgebungsvariablen. Warum nimmst du nicht SetEnvironmentVariable, was du schon stehen, aber auskommentiert hast? Die damit gesetzten Umgebungsvariablen müssten für den aktuellen Prozess und dessen Kinder gültig sein (und wenn nicht, gibt's ja noch das WM_SETTINGCHANGE).
MfG Dalai
Will das nicht gekappt hat