如何运行一个DOS应用程序(命令行的形式),并且返回成功或者失败?
顺便提一个问题,如何判断机器上是否注册了某个COM(+)组件,并切在没有注册的情况注册这个组件。
顺便提一个问题,如何判断机器上是否注册了某个COM(+)组件,并切在没有注册的情况注册这个组件。
解决方案 »
- 如何得到变量的名称?
- 在D7中如何屏蔽word、EXCEL中右上角的 关闭按钮
- 郁闷之极,也来散分
- 请问我在本地写好了程序,然后申请了SQL空间,想把本地的数据库数据传输到SQL的服务器上!请问怎么办?
- 用strcopy和strlcopy时出现问题
- 我只设置时间,不设置日期,用什么控件好???怎么使用???
- 我想去北京工作大家看看我值多少钱
- 怎么这个while循环跳不出来?大家进来看看吧!
- 老大们,如何把光标在MEMO中准确定位到MEMO的最下面一行中?MEMO是空的
- lingice(编程浪子),希望与你交个朋友,原因是...
- 头晕,不想动。帮偶写个函数吧。得到结果就结贴
- Microsoft的秘密
//成功
else
//失败
比如
i:=i+10;
执行命令行程序;
showMessage('OK');
当Showmessage的时候一定是命令行程序执行完毕了吗?
var
hReadPipe,hWritePipe:THandle;
si:STARTUPINFO;
lsa:SECURITY_ATTRIBUTES;
pi:PROCESS_INFORMATION;
mDosScreen:String;
cchReadBuffer:DWORD;
ph:PChar;
fname:PChar;
i,j:integer;
begin
fname:=allocmem(255);
ph:=AllocMem(5000);
lsa.nLength := sizeof(SECURITY_ATTRIBUTES);
lsa.lpSecurityDescriptor := nil;
lsa.bInheritHandle := True;
if CreatePipe(hReadPipe,hWritePipe,@lsa,0)=false then
begin
ShowMessage('Can not create pipe!');
exit;
end;
fillchar(si,sizeof(STARTUPINFO),0);
si.cb :=sizeof(STARTUPINFO);
si.dwFlags :=(STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW);
si.wShowWindow := SW_HIDE;
si.hStdOutput := hWritePipe;
StrPCopy(fname,EditFilename.text);
//edit 中输入你的命令, 如CMD.EXE /c dir/w
if CreateProcess(nil,fname,nil,nil,true,0,nil,nil,si,pi) = False then
begin
ShowMessage('can not create process');
FreeMem(ph);
FreeMem(fname);
Exit;
end;
while(true) do
begin
if not PeekNamedPipe(hReadPipe,ph,1,@cchReadBuffer,nil,nil) then break;
if cchReadBuffer<>0 then
begin
if ReadFile(hReadPipe,ph^,4096,cchReadBuffer,nil)=false then break;
ph[cchReadbuffer]:=chr(0);
Memo1.Lines.Add(ph);
end
else if (WaitForSingleObject(pi.hProcess,0) = WAIT_OBJECT_0) then break;
Sleep(100);
end;
ph[cchReadBuffer]:=chr(0);
Memo1.Lines.Add(ph); //memo接收返回
CloseHandle(hReadPipe);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
CloseHandle(hWritePipe);
FreeMem(ph);
FreeMem(fname);
end;