写了一个DELPHI小程序,目的是练习CreateProcess用法,调用CreateProcess连续打开3个IE窗口
第一个循环里,我从调试器里看,CreateProcess成功,PROCESS_INFORMATION里的pid,跟任务管理器里的一样,IE窗口打开了,也正常显示.
然后,程序关闭IE进程,IE窗口关闭,进入第二个循环,我从调试器里看,CreateProcess也成功,PROCESS_INFORMATION里也有pid,,跟任务管理器里的一样,
但是IE确出错,提示: 应用程序正常初试化(0xc000142)失败
百思不得其解,郁闷得不行,希望高手给指点下
///////////////////////////////懒得写参数了,自己构建个WinExec
function MyWinExec(pName,pParam:pAnsiChar;IsShow:Boolean=true):Cardinal;
var
  si:STARTUPINFO;
  pi:PROCESS_INFORMATION;
  Name:array[0..199] of char;
begin
  ZeroMemory(@Name,200);
  si.cb:=SizeOf(si);
  si.lpReserved:=nil;
  si.lpTitle:=nil;
  si.dwFlags:=STARTF_USESHOWWINDOW;
  if IsSHow then si.wShowWindow:=SW_SHOW else si.wShowWindow:=SW_HIDE;
  strcopy(Name,pName);
  CreateProcess(nil,
                Name,
                nil,
                nil,
                true,
                NORMAL_PRIORITY_CLASS ,
                nil,
                nil,
                si,
                pi);
  Result:=pi.dwProcessId;
  CloseHandle(pi.hThread);
  CloseHandle(pi.hProcess);
end;
/////////////////////////////
st.nOpens:=3;
st.UrlDelay:=10000;
for il:=1 to st.nOpens do begin
    pidIe:=MyWinExec('C:\Program Files\Internet Explorer\IEXPLORE.EXE',st.Urls[il]);
    sleep(st.UrlDelay);
    pHandle:=OpenProcess(PROCESS_ALL_ACCESS,false,pidIe);
    TerminateProcess(pHandle,0);
    CloseHandle(pHandle);
end;

解决方案 »

  1.   

    但是我再CretateProcess后不是又把它Terminate了吗,我从任务管理器里看,Terminate后,进程列表里没有这个pid的IExplore.exe
    而且,在系统已经有IE进程的情况下,情况还是一样,程序第一遍循环里CreateProcess仍然可以成功,进程里仍然会多一个IE进程,也会正常显示一个IE新窗口,第二遍、地三遍循环里CreateProcess成功,进程列表里也有新的IE进程,但是却没有新IE窗口打开,只有个IE的错误提示:应用程序正常初试化(0xc000142)失败
      

  2.   

    Terminate 返回的退出码是什么?做一个延时在开新进程呢?
      

  3.   

    做了延时了,sleep(30000)仍然是一样的情况
    三个循环里Terminate都成功了,就是二、三次循环时IE报错,但是程序上没有提示任何错误
      

  4.   

    IE出错关DELPHI什么事?这得找IE的问题,可这不是你的目的呀
      

  5.   

    楼上说得很有道理,刚刚换了notepad.exe做了下实验,也是这个结果....郁闷死了,发在google论坛上也没人解决
      

  6.   

    TerminateProcess会出问题,因为进程在你手动Terminate之前就有可能自己Terminate了
      

  7.   

    TerminateProcess没出问题,用F7调试时,第一次循环中,执行完TerminateProcess后IE窗口就关了,任务管理器里也没有相应pid的IE进程了,第二、三次循环中,执行完CreateProcess,IE启动但是报错,任务管理器里有相应Pid的IE进程,DELPHI程序仍然正常执行,执行到TerminateProcess后,任务管理器里相应pid的IE进程就没了.
      

  8.   

    我又想了一下,你可以这样尝试:用 CreateProcess 启动 IE 进程后,而不用 TerminateProcess 将其关闭,而是
    用 WaitObject 的方法等待其手动关闭,然后再创建新的 IE 进程,如果这样
    没问题的话,可能还是 TerminateProcess 有问题。