До возвращения 1 из ProgressCallback, или после?L-e-o-N, потому что при отмене нужно килять процесс precomp64.exe
На сколько я понимаю эта команда убьет все процессы, или только один (если так то нужно вызывать до тех пор пока не останется не одного процесса)?L-e-o-N,
Код:var i:integer; .. if (CurStep=ssPostInstall) and ISDoneError then begin Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM precomp.exe', '', SW_HIDE, ewWaitUntilTerminated, i);
Можешь скинуть весь скрипт, чтобы я посмотрел (или хотя бы секцию Code)?Mickey1s, это только убьет процесс при ошибке
if (CurStep=ssPostInstall) and ISDoneError then begin
Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM precomp.exe', '', SW_HIDE, ewWaitUntilTerminated, i);
При отмене установки на примере ISDone0.6final
procedure CancelButtonOnClick(Sender: TObject);
begin
SuspendProc;
if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then ISDoneCancel:=ISDoneCancel;
#ifdef PrecompMt
if not IsWin64 then begin
Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM Precomp.exe', '', SW_HIDE, ewWaitUntilTerminated, i);
end else begin
Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM Precomp64.exe', '', SW_HIDE, ewWaitUntilTerminated, i);
DelTree(ExpandConstant('{app}\'), True, True, True);
end;
#endif
ResumeProc;
end;
procedure CancelButtonOnClick(Sender: TObject);
begin
SuspendProc;
if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then ISDoneCancel:=ISDoneCancel;
#ifdef PrecompMt
if not IsWin64 then begin
Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM Precomp.exe', '', SW_HIDE, ewWaitUntilTerminated, i);
end else begin
Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM Precomp64.exe', '', SW_HIDE, ewWaitUntilTerminated, i);
DelTree(ExpandConstant('{app}\'), True, True, True);
end;
#endif
ResumeProc;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
#ifdef PrecompMt
ExtractTemporaryFile('cls-precompmt.dll');
ExtractTemporaryFile('precomp.exe');
ExtractTemporaryFile('precomp64.exe');
SaveStringToFile(ExpandConstant('{tmp}\cls-precompmt.ini'), '[CLS]'+#13#10+'Threads=75%'+#13#10+'Brute=0'+#13#10+'Temp='+ExpandConstant('{tmp}'), True);
#endif
end;
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data-1.arc'), ExpandConstant('{app}\'), '', false, 'pass', ExpandConstant('{tmp}\cls-precompmt.ini'), ExpandConstant('{app}'), notPCFonFLY{PCFonFLY}) then break;
Теперь установка просто зависает (Директория с программой не полностью очищается, остаются открытые файлы, но поскольку процесс снят установка не продолжается)L-e-o-N,
#define PrecompMt
[Setup]
[Files]
#ifdef PrecompMt
Source: Include\cls-precompmt\cls-precompmt.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\cls-precompmt\precomp.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\cls-precompmt\precomp64.exe; DestDir: {tmp}; Flags: dontcopy
#endif
Код:procedure CancelButtonOnClick(Sender: TObject); begin SuspendProc; if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then ISDoneCancel:=ISDoneCancel; #ifdef PrecompMt if not IsWin64 then begin Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM Precomp.exe', '', SW_HIDE, ewWaitUntilTerminated, i); end else begin Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM Precomp64.exe', '', SW_HIDE, ewWaitUntilTerminated, i); DelTree(ExpandConstant('{app}\'), True, True, True); end; #endif ResumeProc; end; procedure CurStepChanged(CurStep: TSetupStep); begin #ifdef PrecompMt ExtractTemporaryFile('cls-precompmt.dll'); ExtractTemporaryFile('precomp.exe'); ExtractTemporaryFile('precomp64.exe'); SaveStringToFile(ExpandConstant('{tmp}\cls-precompmt.ini'), '[CLS]'+#13#10+'Threads=75%'+#13#10+'Brute=0'+#13#10+'Temp='+ExpandConstant('{tmp}'), True); #endif end; if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data-1.arc'), ExpandConstant('{app}\'), '', false, 'pass', ExpandConstant('{tmp}\cls-precompmt.ini'), ExpandConstant('{app}'), notPCFonFLY{PCFonFLY}) then break;
1.pzlib:m2:x:s:r9:t100p:st100p:ct100p+precompmt+msc:wav=1:raw=1:ddsDXT=1:ddsRAW=0:mp3=1:f:lzma,bt4,lc4,lp0,pb2,fb273:tak=9:dxt=2+srep:l256:a1:m5f+lzma:d200m:fb=273:mf=bt4:mc=1000000:lc=4:lp=0L-e-o-N, так ты дай больше информационный а не куски
1 укажи метод сжатия батник что в нем и в arc.ini и версию файлов pzlib precomp srep
2 что за скрипт ты используеш для распаковки
Я использую precompmt после pzlib-а, точнее все что можно разожмет pzlib, а в конце то что останется precompmt а поскольку остается очеь мало (иногда вообще ничего) то precomp достаточно быстро все обрабатывает.крайне не рекомендую использовать PrecompMT в репаках, у многих кто будет ставить возникнет проблема с прогрессбаром, в играх с большим весом прогрессбар будет 20-30 минут висеть на месте, а потом рывками прыгать и опять застревать, а от юзеров у кого двухъядерный процессор ожидайте гневных комментов и проклинаний