procedure TForm1.Button1Click(Sender: TObject);
var
  i: Boolean;
  PI: _PROCESS_INFORMATION;
  SI: _STARTUPINFOA;
begin
  SI.cb := Sizeof(SI);
  SI.wShowWindow := SW_MAXIMIZE;
  i := CreateProcess(nil, PChar('notepad.exe'), nil, nil, FALSE,
                     CREATE_DEFAULT_ERROR_MODE, nil, nil, SI, PI);
  if i = TRUE then showmessage('right');
end;结果都是CreateProcess返回FALSE,notepad无法启动,是不是那里写错了?大家帮忙看看!

解决方案 »

  1.   

    fillchar(si, sizeof(si), 0);
    si.cb := sizeof(si);
    ...
      

  2.   


    function WinExecAndWait32(FileName: string; Visibility: Boolean): integer;
    var
      zAppName: array[0..512] of char; //存放应用程序名
      StartupInfo: TStartupInfo;
      ProcessInfo: TProcessInformation;
      exitCode: Dword;
      aVisibility: integer;
    begin
      StrPCopy(zAppName, FileName);
      FillChar(StartupInfo, Sizeof(StartupInfo), #0);
      //给StartupInfo结构体赋值
      StartupInfo.cb := Sizeof(StartupInfo);
      StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
      if Visibility then
        aVisibility := 1
      else
        aVisibility := 0;  StartupInfo.wShowWindow := aVisibility;
      //调用CreateProcess 创建进程,执行指定的可执行文件
      if not CreateProcess(nil, zAppName, nil, nil, false
        , CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS
        , nil, nil, StartupInfo, ProcessInfo) then
        Result := -1
      else
      begin
        //等待可执行文件退出
        WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
        //得到进程终止状态码
        GetExitCodeProcess(ProcessInfo.hProcess, exitCode);
        result := Exitcode;
      end;
    end;
      

  3.   

    function WinExecAndWait32(FileName: string; Visibility: Boolean): integer;
    var
      zAppName: array[0..512] of char; //存放应用程序名
      StartupInfo: TStartupInfo;
      ProcessInfo: TProcessInformation;
      exitCode: Dword;
      aVisibility: integer;
    begin
      StrPCopy(zAppName, FileName);
      FillChar(StartupInfo, Sizeof(StartupInfo), #0);
      //给StartupInfo结构体赋值
      StartupInfo.cb := Sizeof(StartupInfo);
      StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
      if Visibility then
        aVisibility := 1
      else
        aVisibility := 0;  StartupInfo.wShowWindow := aVisibility;
      //调用CreateProcess 创建进程,执行指定的可执行文件
      if not CreateProcess(nil, zAppName, nil, nil, false
        , CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS
        , nil, nil, StartupInfo, ProcessInfo) then
        Result := -1
      else
      begin
        //等待可执行文件退出
        WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
        //得到进程终止状态码
        GetExitCodeProcess(ProcessInfo.hProcess, exitCode);
        result := Exitcode;
      end;
    end;
    procedure TForm1.btnExecuteClick(Sender: TObject);
    begin
      WinExecAndWait32('notepad', True);
    end;
    给你全部的好了