这个问题该如何解决啊???快来啊。。。(100分)

  • 主题发起人 主题发起人 haifeilong1
  • 开始时间 开始时间
H

haifeilong1

Unregistered / Unconfirmed
GUEST, unregistred user!
我想通过一个按钮按顺序运行多个安装可执行文件,比如有安装可执行程序
Setup1.exe、Setup2.exe、Setup3.exe、当点击按钮时先自己运行 Setup1.exe 这个安装程序、等安装程序 Setup1.exe 安装完毕后再自动运行安装程序 Setup2.exe ,就这样按顺序连续直到最后一个安装完成
 
用定时器定时扫描进程,如果Setup1.exe进程执行完了,启动Setup2.exe,依次类推
 
绝对好用,注意绝对路径和当前目录噢

function WinExecAndWait32(FileName: string; Visibility: integer): DWORD;
var
zAppName: PChar;
zCurDir: PChar;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
zAppName := StrAlloc(Length(FileName) + 1);
StrPCopy(zAppName, FileName);
zCurDir := StrAlloc(Length(ExtractFileDir(ParamStr(0))) + 1);
StrPCopy(zCurDir, ExtractFileDir(ParamStr(0)));
FillChar(StartupInfo, Sizeof(StartupInfo), #0);
StartupInfo.cb := Sizeof(TStartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW {and STARTF_USESTDHANDLES;};
StartupInfo.wShowWindow := Visibility;
if not CreateProcess(nil,
zAppName, { pointer to command line string }
nil, { pointer to process security attributes }
nil, { pointer to thread security attributes }
True {false}, { handle inheritance flag }
CREATE_NEW_CONSOLE or { creation flags }
NORMAL_PRIORITY_CLASS,
nil, { pointer to new environment block }
zCurDir, { pointer to current directory name }
StartupInfo, { pointer to STARTUPINFO }
ProcessInfo) then Result := $FFFFFFFF { pointer to PROCESS_INF }
else
begin
{WaitforSingleObject(ProcessInfo.hProcess, INFINITE);}
CloseHandle(ProcessInfo.hThread);
WaitForInputIdle(ProcessInfo.hProcess, 10000); {let process start!}
repeat
Application.ProcessMessages;
GetExitCodeProcess(ProcessInfo.hProcess, Result);
until (Result <> STILL_ACTIVE) or Application.Terminated;
CloseHandle(ProcessInfo.hProcess);
end;
end;

示例:WinExecAndWait32('net start SQLAgent$MSDE_SMS_ENT', SW_MINIMIZE);
 
我是新手,有点看不懂!
 
//上面把我的函数复制进来,下面的button click ,懂了吗?[:(][:(]

begin
WinExecAndWait32('Setup1.exe',sw_normal);
WinExecAndWait32('Setup2.exe',sw_normal);
WinExecAndWait32('Setup3.exe',sw_normal);
end;
 
后退
顶部