Проблема в параметре lpCommandLine
.Я подозреваю, что вы делаете что-то вроде этого:
var
CmdLine: string;
...
CmdLine := 'notepad.exe';
CreateProcess(nil, PChar(CmdLine), ...)
Это приводит к нарушению доступа, поскольку CmdLine
не является доступной для записи памятью.Строка является константной строкой, хранящейся в постоянной памяти.
Вместо этого вы можете сделать это:
CmdLine := 'notepad.exe';
UniqueString(CmdLine);
CreateProcess(nil, PChar(CmdLine), ...)
Этого достаточно, чтобы CmdLine
поддерживалось записываемой памятью.
Недостаточно просто сделать переменную, содержащую строку неконстантной, необходимо также сделать память, поддерживающую строку, доступной для записи.Когда вы присваиваете строковый литерал строковой переменной, строковая переменная указывает на постоянную память.