Wo liegt denn dein Problem? Entweder du benutzt AnsiString oder du benutzt WideString. Bei WideString mußt du CREATE_UNICODE_ENVIRONMENT bei den Flags setzen.
Dann setzt du deine Variablen zB so wie du willst:
Delphi-Quellcode:
var s : WideString;
// ^--- kann auch AnsiString sein, der Code bleibt gleich!
// Bis auf CREATE_UNICODE_ENVIRONMENT natürlich ;)
begin
s := 'PATH=C:\Programme';
s := s + #0; // Aktuelle Variable abschließen
// Nächste Variable
s := s + 'BLA=BLUBB';
s := s + #0; // Aktuelle Variable abschließen
// Zuguterletzt den Block abschließen ...
s := s + #0;
end;
Wichtig, am Ende muß immer 2mal #0 stehen!!!
Hoppala, das wichtigste vergessen: Danach übergibst du auf diesen String einen Pointer (genauergesagt auf das erste Zeichen!)
lpEnvironment := Pointer(@s[1]);
vermutlich geht auch
lpEnvironment := @s[1];
(also ohne Pointer-Typecast)
Noch'n Nachtrag: Wenn du eine Kopie eines anderen Environment Blocks machen willst, benutzt du, wie oben schon gesagt,
CreateEnvironmentBlock()!
EDIT4: Sorry, hatte einen Bug, natürlich werden die nächsten Variablen an den String angehangen