請問如何做出安裝進度框? |
尚未結案
|
fordos
一般會員 ![]() ![]() 發表:2 回覆:5 積分:1 註冊:2005-03-05 發送簡訊給我 |
|
huwk
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:26 回覆:340 積分:323 註冊:2002-04-03 發送簡訊給我 |
|
fordos
一般會員 ![]() ![]() 發表:2 回覆:5 積分:1 註冊:2005-03-05 發送簡訊給我 |
HI 各位先進: 我再把我的問題說詳細一點好了,今我寫個小程式,讓user可去選擇它想要安裝的一些軟体(完全自動化),我的程式碼如下: procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if checkBox1.Checked then
ShellExecute(Handle, 'Open', 'c:\install\MP10Setup.exe',
' /Q:A /R:N', nil, SW_Hide);
if checkBox2.Checked then
ShellExecute(Handle, 'Open', 'c:\install\MSN7b.exe',
' /Q:A /R:N', nil, SW_Hide);
if checkBox3.Checked then
ShellExecute(Handle, 'Open','c:\install\fgf12.exe',
' /s', nil, SW_Hide);
if checkBox4.Checked then
ShellExecute(Handle, 'Open', 'c:\install\WinRAR.exe',
' /s', nil, SW_Hide);
if checkBox5.Checked then
ShellExecute(Handle, 'Open', 'c:\install\adobe_reader6.exe',
' -p"-s /v\"/qn\""', nil, SW_Hide);
end; 但因這些都是在背景執行安裝的,user根本無法得知何時裝完,我應該如何寫,才能讓user得知安裝的進度為何? 是否已裝完?
|
alanktop
一般會員 ![]() ![]() 發表:7 回覆:21 積分:5 註冊:2005-03-01 發送簡訊給我 |
function WinExecAndWait(FileName: string; Visibility: integer): integer;
var
zAppName: array[0..512] of char;
zCurDir: array[0..255] of char;
WorkDir: string;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
StrPCopy(zAppName, FileName);
GetDir(0, WorkDir);
StrPCopy(zCurDir, WorkDir);
FillChar(StartupInfo, Sizeof(StartupInfo), #0);
StartupInfo.cb := Sizeof(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := Visibility;
if CreateProcess(nil,
zAppName, { pointer to command line string }
nil, { pointer to process security attributes }
nil, { pointer to thread security attributes }
false, { handle inheritance flag }
CREATE_NEW_CONSOLE or { creation flags }
NORMAL_PRIORITY_CLASS,
nil, { pointer to new environment block }
nil, { pointer to current directory name }
StartupInfo, { pointer to STARTUPINFO }
ProcessInfo) then
begin
WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
Result := 0;
end
else
Result := -1; { pointer to PROCESS_INF }
end; begin
if winexecandwait('c:\install\MP10Setup.exe',1) then
messagebox(handle,'MP10Setup Completed.','Note:',MB_ICONINFORMATION);
end;
|
alanktop
一般會員 ![]() ![]() 發表:7 回覆:21 積分:5 註冊:2005-03-01 發送簡訊給我 |
|
alanktop
一般會員 ![]() ![]() 發表:7 回覆:21 積分:5 註冊:2005-03-01 發送簡訊給我 |
Sorry,我看到你的安装命令都用了参数,应该是不需要用户干预了吧? 这样就用winexecandwait('command name and parameters',0)好了。
用户看不到安装过程,但是能看到安装结束的提示! 例如:
winexecandwait('c:\install\MP10Setup.exe /Q:A /R:N', 0) 而如果这样
winexecandwait('c:\install\MP10Setup.exe /Q:A /R:N', 1)
用户就会看到安装过程了。 但是在这种进程中如何精确使用TProgressBar还有点困难,主要是进程完成的百分比不好计算。
|
alanktop
一般會員 ![]() ![]() 發表:7 回覆:21 積分:5 註冊:2005-03-01 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |