+ -
当前位置:首页 → 问答吧 → Delphi CreateProcess 程序访问违例(RuntimeError)

Delphi CreateProcess 程序访问违例(RuntimeError)

时间:2011-08-25

来源:互联网

一段用到了CreateProcess的程序,其中第二个参数的内容是D:\xxxxx xxxxx\init.exe,运行,然后GetLastError是1812
这个程序编译后放在了D:\xxxxx xxxxx\下,于是手动将第二个参数改成PChar('init.exe');然后直接Runtime Error
求解
Delphi(Pascal) code
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;

作者: sxkdz   发布时间: 2011-08-25

CreateProcess路径不能带空格,你要自己转义处理……

作者: gyk120   发布时间: 2011-08-25

引用 1 楼 gyk120 的回复:

CreateProcess路径不能带空格,你要自己转义处理……
请具体举例说明,谢谢

作者: sxkdz   发布时间: 2011-08-25

引用 1 楼 gyk120 的回复:

CreateProcess路径不能带空格,你要自己转义处理……
这个问题似乎不是出在空格上
我改成 C:\init.exe也报错了1812

作者: sxkdz   发布时间: 2011-08-25

写法应该没有问题,1812意思是:指定的映像文件不包含资源区域
是不是你的exe运行时要用到的其它的资源文件,但找不到

作者: kaikai_kk   发布时间: 2011-08-25

来关注下

作者: iqyely   发布时间: 2011-08-25

热门下载

更多