关于使用winexec(40分)

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

mjwmjw

Unregistered / Unconfirmed
GUEST, unregistred user!
在程序中我使用了winexec,<br>但我如何等该程序执行完,再执行其他语句?<br>&nbsp; &nbsp; 因为我后面的语句要用到前面 被winexec执行的程序的结果!<br>即:我要等待!
 
下面这个函数可以达到你要的功能<br><br>function WinExecAndWait32_v1(FileName: string; Visibility: integer): Cardinal;<br>var<br>&nbsp; zAppName: array[0..512] of char;<br>&nbsp; zCurDir: array[0..255] of char;<br>&nbsp; WorkDir: string;<br>&nbsp; StartupInfo: TStartupInfo;<br>&nbsp; ProcessInfo: TProcessInformation;<br>begin<br>&nbsp; StrPCopy(zAppName, FileName);<br>&nbsp; GetDir(0, WorkDir);<br>&nbsp; StrPCopy(zCurDir, WorkDir);<br>&nbsp; FillChar(StartupInfo, Sizeof(StartupInfo), #0);<br>&nbsp; StartupInfo.cb := Sizeof(StartupInfo);<br>&nbsp; StartupInfo.dwFlags := STARTF_USESHOWWINDOW;<br>&nbsp; StartupInfo.wShowWindow := Visibility;<br>&nbsp; if not CreateProcess(nil,<br>&nbsp; &nbsp; zAppName, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { pointer to command line string }<br>&nbsp; &nbsp; nil, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ pointer to process security attributes }<br>&nbsp; &nbsp; nil, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ pointer to thread security attributes }<br>&nbsp; &nbsp; true, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { handle inheritance flag }<br>&nbsp; &nbsp; CREATE_NEW_CONSOLE or &nbsp; { creation flags }<br>&nbsp; &nbsp; NORMAL_PRIORITY_CLASS,<br>&nbsp; &nbsp; nil, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ pointer to new environment block }<br>&nbsp; &nbsp; nil, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ pointer to current directory name, PChar}<br>&nbsp; &nbsp; StartupInfo, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ pointer to STARTUPINFO }<br>&nbsp; &nbsp; ProcessInfo) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ pointer to PROCESS_INF }<br>&nbsp; &nbsp; then Result := INFINITE {-1} else<br>&nbsp; begin<br>&nbsp; &nbsp; WaitforSingleObject(ProcessInfo.hProcess, INFINITE);<br>&nbsp; &nbsp; GetExitCodeProcess(ProcessInfo.hProcess, Result);<br>&nbsp; &nbsp; CloseHandle(ProcessInfo.hProcess); &nbsp;{ to prevent memory leaks }<br>&nbsp; &nbsp; CloseHandle(ProcessInfo.hThread);<br>&nbsp; end;<br>end;<br><br>Good luck!
 
&nbsp;to hnzgf:<br><br>&nbsp; Thank for your help!<br>&nbsp; when i use this function as follows;<br>WinExecAndWait32_v1(path+'win32/install/orainst.exe /silent /prd win95.prd /rspsrc client_ok.rsp',SW_SHOWNORMAL);<br>不能正确执行,说明如下:<br>&nbsp; &nbsp;orainst.exe本身是一个安装程序(我要对其进行一些封装),安装过程中它 要将一些<br>文件(包括其自身)copy到c:<br>&nbsp;当我用 用winexec时可以正确执行,而用此函数 &nbsp;当copy到 orainst。exe时,程序变成无响应状态<br>,或所谓的等待状态,最后只有用ctrl+alt+del &nbsp;结束这个进程。 &nbsp;<br>&nbsp; &nbsp;不知是否与waitsingleobject();这个进程等待函数有关?<br>我正在调试, 希望你仍能 不吝赐教!
 
orainst是不是oracle的安装程序?<br>我现在觉得如果拷贝自身的话是不是造成死循环了?<br>我再看看!
 
我在我的机器上试了msdn2000的安装程序,是可以的,你可以再试试其它的程序!<br><br>Good luck!
 
to hnzgf:<br>&nbsp; &nbsp; 不好意思,还得向你请教,<br>1。orainst。exe确实是 oracle的安装程序(我想做一个外壳将其封装一下),<br>2。按照你的思路。我又试了一下,如果直接用winexec的话,orainst执行正常,但当用<br>&nbsp; &nbsp;WinExecAndWait32_v1()时,还是当执行到copy orainst。exe时死机。<br><br>&nbsp;我不知你用msdn2000的安装程序 进行测试时 ,安装程序是否也copy 安装程序 其自身?<br>&nbsp; 另外,不知调整一下进程生成函数 &nbsp;或者waitforsingleoject() 之间的参数是否有用?<br>&nbsp;if not CreateProcess(nil,<br>&nbsp; &nbsp; zAppName, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { pointer to command line string }<br>&nbsp; &nbsp; nil, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ pointer to process security attributes }<br>&nbsp; &nbsp; nil, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ pointer to thread security attributes }<br>&nbsp; &nbsp; true, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { handle inheritance flag }<br>&nbsp; &nbsp; CREATE_NEW_CONSOLE or &nbsp; { creation flags }//这个参数是否需要修改一下?<br>&nbsp; &nbsp; NORMAL_PRIORITY_CLASS,<br>&nbsp; &nbsp; nil, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ pointer to new environment block }<br>&nbsp; &nbsp; nil, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ pointer to current directory name, PChar}<br>&nbsp; &nbsp; StartupInfo, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ pointer to STARTUPINFO }<br>&nbsp; &nbsp; ProcessInfo) &nbsp; &nbsp; <br>
 
我这没有Oracle :-(<br>不过我也是运行硬盘上msdn2000的安装程序--setup.exe,也就是说msdn也是把安装程序<br>考到硬盘里了,就是你所说的拷贝自身。我不是太赞成你说的换那个参数,你可以看看<br>msdn得帮助,这两个参数我认为是合适的,只能从其它地方下手了。我会继续尝试的,另外<br>你可以用msdn试试。
 
to:hnzgf;<br>我经过单步调试后,发现问题如下:<br>&nbsp;主程序:<br>&nbsp; &nbsp; main.pas<br>&nbsp; &nbsp;var ..... &nbsp; <br>&nbsp; &nbsp;begin<br>&nbsp; &nbsp; &nbsp;.... &nbsp; &nbsp; &nbsp; <br>&nbsp; number:=WinExecAndWait32_v1(path+'win32/install/orainst.exe /silent /prd win95.prd /rspsrc client_ok.rsp',SW_SHOWNORMAL);<br>&nbsp; &nbsp;...<br>&nbsp; &nbsp;end;<br>&nbsp; function WinExecAndWait32_v1 &nbsp;部分如下:<br>&nbsp; begin<br>&nbsp; .......<br>&nbsp; StartupInfo.cb := Sizeof(StartupInfo);<br>&nbsp; StartupInfo.dwFlags := STARTF_USESHOWWINDOW;<br>&nbsp; StartupInfo.wShowWindow := Visibility;<br>&nbsp; if not CreateProcess(nil,<br>&nbsp; &nbsp; zAppName, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { pointer to command line string }<br>&nbsp; &nbsp; nil, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ pointer to process security attributes }<br>&nbsp; &nbsp; nil, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ pointer to thread security attributes }<br>&nbsp; &nbsp; true, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { handle inheritance flag }<br>&nbsp; &nbsp; CREATE_NEW_CONSOLE or &nbsp; { creation flags }<br>&nbsp; &nbsp; NORMAL_PRIORITY_CLASS,<br>&nbsp; &nbsp; nil, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ pointer to new environment block }<br>&nbsp; &nbsp; nil, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ pointer to current directory name, PChar}<br>&nbsp; &nbsp; StartupInfo, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ pointer to STARTUPINFO }<br>&nbsp; &nbsp; ProcessInfo) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ pointer to PROCESS_INF }<br>&nbsp; &nbsp; then Result := INFINITE {-1} else<br>&nbsp; begin<br>---------&gt; &nbsp; &nbsp;WaitforSingleObject(ProcessInfo.hProcess, INFINITE);<br>&nbsp; &nbsp; GetExitCodeProcess(ProcessInfo.hProcess, Result);<br>&nbsp; &nbsp; CloseHandle(ProcessInfo.hProcess); &nbsp;{ to prevent memory leaks }<br>&nbsp; &nbsp; CloseHandle(ProcessInfo.hThread);<br>&nbsp; end;<br>end;<br>&nbsp; &nbsp; 单步执行到箭头所指处,ORAINST.EXE安装程序执行到COPY ORAINST.EXE自己时不能<br>执行了,当我将我自己所调试的程序<br>中止调试状态后(即退出后), ORAINST.EXE 又能接着执行了。 &nbsp;问题可能处在这儿--<br>是不是该进程与父进程 存在这一些 内在依赖关系? 希望你能帮助分析一下。<br>&nbsp; &nbsp;<br>.....刚才我又 单步执行了一下原来的程序,发现用 winexec也存在 这样的问题,好像<br>必须 调用ORAINST.EXE的程序执行完之后,该程序才能正确执行。<br>&nbsp; 我也再看看帮助先!
 
to hnzgf:<br>这两天我受 一个VC例子的启发(具体实现同你的方法差不多)尝试开一个线程来做,<br>(以前不是用一个进程来做的嘛),具体方法如下:<br>&nbsp; &nbsp; sleep(10000),目的主要是为了调试,又是执行到箭头处,死机,连线程也不再执行,<br>如果再单步执行 &nbsp;WaitforSingleObject(MainProcessInfo, INFINITE)句,结果由于此句的<br>执行, 产生对线程的等待,导致 主程序也死了。 &nbsp;<br>&nbsp; &nbsp;为什么????唉!实在不行的话,我就只能用 Vc++试试看了(不过不大熟)<br>主程序:(摘要)<br>var<br>&nbsp; Form1: TForm1;<br>&nbsp; MainProcessInfo : Thandle ;<br>&nbsp; Mainthread:thandle;<br>begin<br>&nbsp; &nbsp;Path:=ExtractFilePath(Application.Exename);<br>&nbsp; &nbsp; MyThread.Create(path+'win32/install/orainst.exe /silent /prd win95.prd /rspsrc client_ok.rsp',SW_SHOWNORMAL);<br>&nbsp; &nbsp; sleep(10000);<br>------&gt; &nbsp; &nbsp;WaitforSingleObject(MainProcessInfo, INFINITE);//后面的 时间参数 &nbsp;决定进程无限期等待<br>&nbsp; &nbsp; CloseHandle(MainProcessInfo); &nbsp;{ to prevent memory leaks }<br>&nbsp; &nbsp; CloseHandle(Mainthread);<br>end<br>线程如下:<br>unit ViceHanshu;<br><br>interface<br><br>uses<br>&nbsp; Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,<br>&nbsp; StdCtrls, FileCtrl;<br><br>type<br>&nbsp; MyThread = class(TThread)<br>&nbsp;private<br>&nbsp; &nbsp; { Private declarations }<br>&nbsp; &nbsp; FileName: string;<br>&nbsp; &nbsp; Visibility: integer;<br>&nbsp;protected<br>&nbsp; &nbsp; procedure Execute; override;<br>&nbsp; &nbsp;function WinExecAndWait32_v1(FileName: string; Visibility: integer): Cardinal;<br>&nbsp;public<br>constructor Create(ViceFileName: string; ViceVisibility: integer);<br>&nbsp; end;<br>implementation<br>&nbsp; uses main;<br>{ MyThread }<br>function MyThread.WinExecAndWait32_v1(FileName: string; Visibility: integer): Cardinal;<br>var<br>&nbsp; zAppName: array[0..512] of char;<br>&nbsp; zCurDir: array[0..255] of char;<br>&nbsp; WorkDir: string;<br>&nbsp; StartupInfo: TStartupInfo;//这是创建一个新进程的 显示时必要的结构信息<br>&nbsp; &nbsp; &nbsp;ProcessInfo: TProcessInformation;<br>begin<br>&nbsp; StrPCopy(zAppName, FileName); //文件名格式的转换§该函数将典型的pascal字符串变为 以0结尾的字符串指针(windows通用)<br>&nbsp; FillChar(StartupInfo, Sizeof(StartupInfo), #0);//将这个结构 全部用空格填充<br>&nbsp; StartupInfo.cb := Sizeof(StartupInfo);<br>&nbsp; StartupInfo.dwFlags := STARTF_USESHOWWINDOW;//窗口布局管理,为此值,下面一属性才能起作用<br>&nbsp; StartupInfo.wShowWindow := Visibility; &nbsp;//主要是确定窗口显示的风格,与winexec是一样的<br>&nbsp; if not CreateProcess(nil, //这里如果部位空,则只能为一个 可执行程序<br>&nbsp; &nbsp; zAppName, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { pointer to command line string }<br>&nbsp; &nbsp; nil, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//进程优先级别<br>&nbsp; &nbsp; nil, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//线程优先级别<br>&nbsp; &nbsp; true, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { handle inheritance flag }<br>&nbsp; &nbsp; CREATE_NEW_CONSOLE or &nbsp; { creation flags }<br>&nbsp; &nbsp; NORMAL_PRIORITY_CLASS,<br>&nbsp; &nbsp; nil, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ pointer to new environment block }<br>&nbsp; &nbsp; nil, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ pointer to current directory name, PChar}<br>&nbsp; &nbsp; StartupInfo, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ pointer to STARTUPINFO }<br>&nbsp; &nbsp; ProcessInfo) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//声明一个结构来存储 进程的消息。<br>&nbsp; &nbsp; then Result := INFINITE &nbsp;else<br>&nbsp; begin<br>&nbsp; &nbsp; MainProcessInfo:= ProcessInfo.hProcess;<br>&nbsp; end;<br>end;<br>constructor mythread.Create(ViceFileName: string; ViceVisibility: integer);<br>begin<br>&nbsp; filename:= ViceFileName;<br>&nbsp; visibility:= ViceVisibility;<br>&nbsp; //FreeOnTerminate := True;<br>&nbsp; inherited Create(False); //表示一创建就执行<br>end;<br>procedure MyThread.Execute;<br>begin<br>&nbsp; { Place thread code here }<br>&nbsp; WinExecAndWait32_v1(FileName, Visibility);<br>end;<br>end.
 
to mjwmjw:<br>我已经在我机器上试过了,运行orainst.exe不会出现问题,是不是你的机器有毛病了?<br>你试一试其它程序吧,最好的一个例子就是msdn,因为msdn也会把自己的安装程序拷入<br>硬盘的.<br>祝你好运!
 
to hnzgf:<br>&nbsp; &nbsp;我不明白!我不服气!程序在这不能执行,在你那能执行!<br>我给你程序的简化版,你试一试!(其主要技巧与你的方法一样)<br>&nbsp; procedure TForm1.FormShow(Sender: TObject);<br>var<br>&nbsp; &nbsp;sCommandLine,path:string;<br>&nbsp; &nbsp;bCreateProcess: boolean;<br>&nbsp; &nbsp;lpStartupInfo: TStartupInfo;<br>&nbsp; &nbsp;lpProcessInformation: TProcessInformation;<br>begin<br>&nbsp; &nbsp;path:=Extractfilepath(Application.ExeName);<br>&nbsp; &nbsp;//sCommandLine :=path+'win32/install/orainst.exe /silent /prd win95.prd /rspsrc client_ok.rsp';<br>&nbsp; &nbsp; sCommandLine :=path+'win32/install/orainst.exe ';<br><br>&nbsp; &nbsp;lpStartupInfo.dwFlags := STARTF_USESHOWWINDOW;<br>&nbsp; &nbsp;lpStartupInfo.wShowWindow := SW_shownormal;<br>&nbsp; &nbsp;bCreateProcess := CreateProcess(nil, PChar(sCommandLine),nil,nil,True,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; HIGH_PRIORITY_CLASS, nil, nil,lpStartupInfo, lpProcessInformation);<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sleep(10000);<br>&nbsp; &nbsp;if bCreateProcess then<br>&nbsp; &nbsp; &nbsp; &nbsp; WaitForSingleObject(lpProcessInformation.hProcess, INFINITE);<br>&nbsp; &nbsp; &nbsp; &nbsp; showmessage('That is ok!');<br>end;<br>&nbsp; &nbsp;你运行一下试试,然后留意这一行:<br>&nbsp; //sCommandLine :=path+'win32/install/orainst.exe /silent /prd win95.prd /rspsrc client_ok.rsp';<br>&nbsp;后面的参数 用处很大,利用以前安装的皮配置文件使 安装程序安装到 c:一个固定<br>目录。<br>&nbsp; &nbsp; 不过,你现在可以先不考虑这个问题,就先 运行orainsrt。exe这个安装文件试一试。<br>&nbsp; 如果你愿意,给我发一下你测试的源代码吗?<br>我始终觉得出现这重情况是不正常的, 肯定是我在哪一个地方,有一点小问题。<br>&nbsp;如果有必要,我可以发给你这两个配置文件。到时给我来信即可。<br>&nbsp; 急切等候你的回信!<br>&nbsp;
 
to hnzgf:<br>&nbsp; &nbsp;我不明白!我不服气!程序在这不能执行,在你那能执行!<br>我给你程序的简化版,你试一试!(其主要技巧与你的方法一样)<br>&nbsp; procedure TForm1.FormShow(Sender: TObject);<br>var<br>&nbsp; &nbsp;sCommandLine,path:string;<br>&nbsp; &nbsp;bCreateProcess: boolean;<br>&nbsp; &nbsp;lpStartupInfo: TStartupInfo;<br>&nbsp; &nbsp;lpProcessInformation: TProcessInformation;<br>begin<br>&nbsp; &nbsp;path:=Extractfilepath(Application.ExeName);<br>&nbsp; &nbsp;//sCommandLine :=path+'win32/install/orainst.exe /silent /prd win95.prd /rspsrc client_ok.rsp';<br>&nbsp; &nbsp; sCommandLine :=path+'win32/install/orainst.exe ';<br><br>&nbsp; &nbsp;lpStartupInfo.dwFlags := STARTF_USESHOWWINDOW;<br>&nbsp; &nbsp;lpStartupInfo.wShowWindow := SW_shownormal;<br>&nbsp; &nbsp;bCreateProcess := CreateProcess(nil, PChar(sCommandLine),nil,nil,True,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; HIGH_PRIORITY_CLASS, nil, nil,lpStartupInfo, lpProcessInformation);<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sleep(10000);<br>&nbsp; &nbsp;if bCreateProcess then<br>&nbsp; &nbsp; &nbsp; &nbsp; WaitForSingleObject(lpProcessInformation.hProcess, INFINITE);<br>&nbsp; &nbsp; &nbsp; &nbsp; showmessage('That is ok!');<br>end;<br>&nbsp; &nbsp;你运行一下试试,然后留意这一行:<br>&nbsp; //sCommandLine :=path+'win32/install/orainst.exe /silent /prd win95.prd /rspsrc client_ok.rsp';<br>&nbsp;后面的参数 用处很大,利用以前安装的皮配置文件使 安装程序安装到 c:一个固定<br>目录。<br>&nbsp; &nbsp; 不过,你现在可以先不考虑这个问题,就先 运行orainsrt。exe这个安装文件试一试。<br>&nbsp; 如果你愿意,给我发一下你测试的源代码吗?<br>我始终觉得出现这重情况是不正常的, 肯定是我在哪一个地方,有一点小问题。<br>&nbsp;如果有必要,我可以发给你这两个配置文件。到时给我来信即可。<br>&nbsp; 急切等候你的回信!<br>&nbsp;
 
to mjwmjw:<br>因为我对oracle不是太了解,我是找了一张oracle8.05的盘,然后运行setup.exe,安装正常,<br>然后我又用程序运行 /orant/bin/orainst.exe,然后发现已经没有产品安装了,我选了<br>安装路径,只找到了一个SQL Tcp/IP net之类的产品,好像是协议吧,但是并没有报什么错误.<br>不知你的问题到底是什么?
 
to hnzgf:<br>&nbsp; &nbsp;谢谢你这几天的不吝帮助,这个问题还没有解决,不过,就暂时讨论这儿吧。<br>问题的情况我再说一下,如果你再有什么建议,可以给我发信:mjw@mail.cumtb.edu.cn<br><br>&nbsp; 如你所诉,直接运行setup。exe肯定不行,因为这时该安装的已经安装了,我得意思是<br>直接运行orainst。exe ,说清 后面带的参数比较复杂。其实你可以直接运行 &nbsp;orainst。exe<br>,这时你可以看到 我说的效果。<br>&nbsp; &nbsp;这期间我又 调整了 &nbsp;createprocess()的参数,不过结果不太理想。<br>&nbsp;再次。谢谢你的帮助!<br>
 
后退
顶部