In my program I\'ve the following code:
//Code
if not CreateProcess(nil, NonConstCmd, nil, nil, True, NORMAL_PRIORITY_CLASS or
CREATE_NEW_PROCESS_GROUP,
Here an explanation why Unicode Delphi requires a different way to call CreateProcess: http://edn.embarcadero.com/article/38693
The problem is in the lpCommandLine parameter. I suspect you are doing something like this:
var
CmdLine: string;
...
CmdLine := 'notepad.exe';
CreateProcess(nil, PChar(CmdLine), ...)
This results in an access violation because CmdLine is not writeable memory. The string is a constant string stored in read-only memory.
Instead you can do this:
CmdLine := 'notepad.exe';
UniqueString(CmdLine);
CreateProcess(nil, PChar(CmdLine), ...)
This is enough to make CmdLine be backed by writeable memory.
It is not enough just to make the variable holding the string non-const, you need to make the memory that backs the string writeable too. When you assign a string literal to a string variable, the string variable points at read-only memory.