写了一个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;
第一个循环里,我从调试器里看,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;
解决方案 »
- 请问一个Tadoquery控件open的问题
- 请教:TWebBrowser打开网页(网页中都是文字)时如何自动定位到某一位置?
- 用delphi打开pdf文档时,怎样才能屏蔽“另存副本”按钮?
- 这个SQL语句怎么写
- 如何判定数据库正在被修改?
- 控制字符的输入长度问题??急用
- 问用过delphi自带数据库paradox的朋友一个问题。
- 有人帮忙吗?实在不解呀。。。
- ====各位大虾,请看这边:这段代码有什么问题?=====
- delphi 中建立临时表及取得临时表内容
- 用memo控件写入内容,用QRRichText在报表中显示.为什么显示格式不对!
- 任命jinjazz (近身剪(充电中...)) 为 Delphi版大版主
而且,在系统已经有IE进程的情况下,情况还是一样,程序第一遍循环里CreateProcess仍然可以成功,进程里仍然会多一个IE进程,也会正常显示一个IE新窗口,第二遍、地三遍循环里CreateProcess成功,进程列表里也有新的IE进程,但是却没有新IE窗口打开,只有个IE的错误提示:应用程序正常初试化(0xc000142)失败
三个循环里Terminate都成功了,就是二、三次循环时IE报错,但是程序上没有提示任何错误
用 WaitObject 的方法等待其手动关闭,然后再创建新的 IE 进程,如果这样
没问题的话,可能还是 TerminateProcess 有问题。