用WIN32 API WINEXEC()执行了一个程序,后程序不退出内存?(100分)

  • 主题发起人 主题发起人 Mischa
  • 开始时间 开始时间
M

Mischa

Unregistered / Unconfirmed
GUEST, unregistred user!
具体情况是这样的:<br>&nbsp; &nbsp; 我在DELPHI中用WINEXEC释放一个事先用ARJ压缩作成的自解包。<br>其结果是,包也放了,可是这个自解包程序占在内存里不出来。<br>(我在WIN98下,用CTRL-ALT-DELETE可以看到这个包还在内存中)<br>问:这是什么原因?用什么方法可以让它执行后退出内存?<br>具体代码大致如下:<br>...<br>var<br>cmdline:pchar<br>begin<br>cmdline := 'rs000505.exe'<br>if (winexec(cmdline,true))&gt;31 then<br>showmessage('释放成功');<br>end;<br>执行后内存中便有了一个RS000505程序,执行一次多一个。<br>
 
它只是运行一下,不负责关闭,
 
估计他运行完毕要读任意键。试试编辑一个文本文件.<br><br>-----a.txt<br>copy con a.txt<br>abadfasfsdf<br>^Z<br>
 
应该这样说:<br><br>if (winexec(cmdline,true))&gt;31 then<br>showmessage('运行成功(正在运行)');
 
为什么不强制释放?<br>1。使用 Ws32.exe 查看'rs000505.exe'的运行信息<br>2。FindWindow 寻找窗口列表中第一个符合指定条件的窗口<br>3。DestroyWindow清除指定的窗口以及它的所有子窗口
 
哎呀。。hsw,我的oicq经常出现rs000505.exe 不能read, 然后完蛋了。<br>rs000505什么东东?
 
用FindWindow 寻找窗口列表中第一个符合指定条件的窗口,然后用DestroyWindow<br>清除指定的窗口以及它的所有子窗口
 
{WindowState是一个SW_xxx类型常量,<br>可以在API中查找ShowWindow}<br>function ExecAndWait(const Filename, Params: string; <br>WindowState: word): boolean;<br>var<br><br>&nbsp; SUInfo: TStartupInfo;<br><br>&nbsp; ProcInfo: TProcessInformation;<br><br>&nbsp; CmdLine: string;<br><br>begin<br><br>&nbsp; { 注意检查长文件名}<br><br>&nbsp; CmdLine := '"' + Filename + '"' + Params;<br><br>&nbsp; FillChar(SUInfo, SizeOf(SUInfo), #0);<br><br>&nbsp; with SUInfo do<br><br>&nbsp; begin<br><br>&nbsp; &nbsp; cb := SizeOf(SUInfo);<br><br>&nbsp; &nbsp; dwFlags := STARTF_USESHOWWINDOW;<br><br>&nbsp; &nbsp; wShowWindow := WindowState;<br><br>&nbsp; end;<br><br><br>&nbsp; Result := CreateProcess(NIL, PChar(CmdLine), NIL, NIL, FALSE,<br><br>&nbsp; &nbsp; &nbsp;CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, NIL,<br><br>&nbsp; &nbsp; &nbsp;PChar(ExtractFilePath(Filename)), SUInfo, ProcInfo);<br><br>&nbsp; {等待结束 }<br><br>&nbsp; if Result then<br><br>&nbsp; begin<br><br>&nbsp; &nbsp; &nbsp;WaitForSingleObject(ProcInfo.hProcess, INFINITE);<br><br>&nbsp; &nbsp; &nbsp;{清理号柄 }<br><br>&nbsp; &nbsp; &nbsp;CloseHandle(ProcInfo.hProcess);<br><br>&nbsp; &nbsp; &nbsp;CloseHandle(ProcInfo.hThread);<br><br>&nbsp; end;<br>end;<br>
 
多人接受答案了。
 
后退
顶部