一段用到了CreateProcess的程序,其中第二个参数的内容是D:\xxxxx xxxxx\init.exe,运行,然后GetLastError是1812
这个程序编译后放在了D:\xxxxx xxxxx\下,于是手动将第二个参数改成PChar('init.exe');然后直接Runtime Error
求解
procedure TForm1.Button4Click(Sender: TObject);
var
    TimeLimit: longint;
    TStringsTemp: TStrings;
    hWrite: THandle;
    siStartupinfo: TStartupInfo;
    piProcessinfo: TProcessInformation;
    dRet: Boolean;
begin
    TStringsTemp := TStringList.Create;    CreateDirectory(PChar('Temp'), Nil);
    TimeLimit := StrToInt(Form1.Edit4.Text);
    Form1.Memo1.Lines := TStringsTemp;    FillChar(siStartupinfo, Sizeof(siStartupInfo), #0);
    GetStartupInfo(siStartupInfo);
    hWrite := CreateFile(PChar('Temp\Input.txt'), GENERIC_WRITE, 0, Nil,
                        CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
    with siStartupInfo do
    begin
        cb := SizeOf(siStartupInfo);
        wShowWindow := SW_HIDE;
        dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
        hStdOutput := hWrite;
    end;    dRet := CreateProcess(nil, PChar('"'+Form1.Edit3.Text+'"'), nil, nil, true,
                          NORMAL_PRIORITY_CLASS, nil, nil, siStartupinfo, piProcessinfo);
    Messagebox(0, PChar(IntToStr(GetLastError)), '', 0);
    //WaitForSingleObject(piProcessinfo)
    //RemoveDirectory(PChar('Temp'));
end;