Вызовите ExpandEnvironmentStrings , чтобы развернуть переменные среды.
Когда вы используете cmd.exe, он выполняет расширение для вас. CreateProcess этого не делает, поэтому вам нужно будет сделать это перед вызовом CreateProcess. В качестве альтернативы вы можете использовать ShellExecute, который будет расширять строки окружения.
Ваш текущий код не соответствует договору CreateProcess. Второй параметр должен быть указателем на модифицируемую память. С этим можно обойтись, если вы используете ANSI API, но при настройке Unicode ваш код может потерпеть неудачу. Передайте указатель на модифицируемую память, а не указатель на литерал. Если бы вы добавили вызов для расширения переменных среды, вы бы получили изменяемую строку.
Наконец, похоже, вы просто пытаетесь открыть текстовый файл. Зачем заставлять пользователя просматривать его в блокноте? Мой редактор по умолчанию для текстовых файлов не Блокнот. Я ненавидел бы любую программу, которая навязывала мне Блокнот. Вместо этого позвольте оболочке открыть файл в редакторе, выбранном пользователем. Вызовите ShellExecute, используйте «open» в качестве глагола и передайте имя текстового файла в качестве параметра имени файла. С другой стороны, возможно, вы знаете все это, и это только пример кода. Если это так, пожалуйста, просто проигнорируйте этот совет.