Как упоминал Крис, вы объединяете два значения (без пробела между ними) в одну длинную строку. Поскольку `c: \ apps \ foo.exec: \ apps \ ', вероятно, не совсем то, что вы хотели, вам, вероятно, не следует этого делать.
Кроме того, если любой из путей содержит пробелы, вам может потребоваться добавить двойные кавычки. Delphi имеет функцию в SysUtils только для этой цели:
var
AppPath, ExePath: string
begin
// Setup StartupInfo and ProcInfo as before. Omitted for brevity here.
ExePath := AnsiQuotedStr(ParamStr(0), '"');
AppPath := AnsiQuotedStr(ExtractFilePath(ExePath), '"');
Result:= CreateProcess(nil, ExePath, Nil, Nil, False, 0,
Nil, Apppath, StartupInfo, ProcInfo);
end;
Обратите внимание, что при назначении двух значений строковым переменным приведение PChar обычно не требуется, так как компилятор будет неявно обрабатывать его за вас.