Войти

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 4]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 [92] 93 94 95 96 97 98 99 100 101 102 103 104 105

R.i.m.s.k.y.
04-05-2012, 12:43
Johny777, ты вообще неправильно делаешь
1. Зачем ты переменные взял в кавыки? архиватору ты вместо путей передаешь переменные
2. пробелы
procedure CurStepChanged(CurStep: TSetupStep);
var
Res: Integer;
s1, s2, s3, s4, s5: string;

begin
if CurStep = ssPostInstall then
begin
s1 := 'a -sfx7z.sfx -mx9';
s2 := Addquotes(ExpandConstant('{userdesktop}\saved.exe'));
s3 := Addquotes(ExpandConstant('{app}'));


ExtractTemporaryFile('7za.exe');
ExtractTemporaryFile('7z.sfx');
Exec(ExpandConstant('{tmp}\7za.exe'), s1 + ' ' + s2 + ' ' + s3, ExpandConstant('{tmp}'), SW_SHOW, ewWaitUntilTerminated, Res);
end;
end;

Johny777
04-05-2012, 12:47
R.i.m.s.k.y.,
извиняюсь
не подумал
за основу взял "создание ярлыка"

if CurStep = ssPostInstall then
begin
s2_hl2:= hl2_Launch_Edit.Text;
s1_hl2:= ExpandConstant('-steam -game hl2 -appid 220');
begin
if hl2_icon_Checkbox.Checked then
CreateShellLink(ExpandConstant('{userdesktop}\Half-Life 2.lnk'), '',
ExpandConstant('{app}\common\half-life 2\hl2.exe'),s1_hl2 + s2_hl2, ExpandConstant('{app}\common\half-life 2'), ExpandConstant('{app}\common\half-life 2\hl2.ico'), 0, SW_SHOWNORMAL);
end;

Теперь всё супер! Буду знать
Касательно сжатия
Стоит ли предоставлять пользовател возможность выбирать уровень сжатия
на данный момент стоит -m9, при котором 60мб ужались до 600кб
у меня 4 гига оперативы. У кого-то может быть меньше и этот параметр не будет работать.
Как лучше?
Может сделать среднее сжатие и не мучиться?

R.i.m.s.k.y.
04-05-2012, 13:15
Johny777, мне тут подсказали недавно хороший принцип KISS (http://ru.wikipedia.org/wiki/Keep_It_Simple,_Stupid) :)
делай простейшее сжатие, это быстро, рамы мало занимает, инсталлер не примерзает

Johny777
04-05-2012, 16:42
R.i.m.s.k.y.,
а как прицепить название архива "saved.exe"?
(что то у меня с грамматикой совсем не лады)
так не получается (закомментировано)
без s4 сохраняет куда надо, но без названия. Например в диск C - .exe, а на рабочий стол - Desktop.exe :(

procedure CurStepChanged(CurStep: TSetupStep);
var
Res: Integer;
s1, s2, s3, s4, s5: string;

begin
if CurStep = ssPostInstall then
begin
if Zip_CheckBox.Checked = true then
begin
s1 := 'a -sfx7z.sfx -mx9';
s2 := Addquotes(Zip_Path_Edit.Text);
s3 := Addquotes(ExpandConstant('{tmp}\{#Save_Folder}'));

//s4 := 'saved';
//s4 := AddBackslash('saved');
//s4 := AddBackslash('saved.exe');


ExtractTemporaryFile('7za.exe');
ExtractTemporaryFile('7z.sfx');
Exec(ExpandConstant('{tmp}\7za.exe'), s1 + ' ' + s2 + s4 + ' ' + s3, ExpandConstant('{tmp}'), SW_SHOW, ewWaitUntilTerminated, Res);
end;
end;
end;
вот полный код (пришлось создать 2 эдита, тк 7Zip не умеет удалять после архивации сжимаемые файлы)

#define MyAppName "Backup"
#define Save_Folder "saved"


[Setup]
SourceDir=.
OutputDir=Source Engine 15\uninstall
AppName={#MyAppName}
AppVerName={#MyAppName}
AppVersion={#MyAppName}
DefaultDirName={userdesktop}\{#Save_Folder}
OutputBaseFilename={#MyAppName}
Uninstallable=false
ShowLanguageDialog=auto
LanguageDetectionMethod=uilanguage
DisableWelcomePage=yes
DisableReadyPage=yes


[Files]
Source: {src}\..\common\half-life 2\bin\stats.bin; DestDir: {app}\common\half-life 2\bin; Flags: external ignoreversion recursesubdirs createallsubdirs;
Source: {src}\..\common\half-life 2 episode one\bin\stats.bin; DestDir: {app}\common\half-life 2 episode one\bin; Flags: external ignoreversion recursesubdirs createallsubdirs;
Source: {src}\..\common\half-life 2 episode two\bin\stats.bin; DestDir: {app}\common\half-life 2 episode two\bin; Flags: external ignoreversion recursesubdirs createallsubdirs;
Source: {src}\..\common\portal\bin\stats.bin; DestDir: {app}\common\portal\bin; Flags: external ignoreversion recursesubdirs createallsubdirs;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Source: {src}\..\common\half-life 2\hl2\SAVE\*; DestDir: {app}\common\half-life 2\hl2\SAVE; Flags: external ignoreversion recursesubdirs createallsubdirs;
Source: {src}\..\common\half-life 2 episode one\episodic\SAVE\*; DestDir: {app}\common\half-life 2 episode one\episodic\SAVE; Flags: external ignoreversion recursesubdirs createallsubdirs;
Source: {src}\..\common\half-life 2 episode two\ep2\SAVE\*; DestDir: {app}\common\half-life 2 episode two\ep2\SAVE; Flags: external ignoreversion recursesubdirs createallsubdirs;
Source: {src}\..\common\portal\portal\SAVE\*; DestDir: {app}\common\portal\portal\SAVE; Flags: external ignoreversion recursesubdirs createallsubdirs;


Source: 7za.exe; DestDir: {tmp}; Flags: dontcopy;
Source: 7z.sfx; DestDir: {tmp}; Flags: dontcopy;


[ Code]
var
Zip_CheckBox: TNewCheckBox;
Zip_Path_Edit: TNewEdit;
Zip_Path_Button: TNewButton;


function Make_Zip: Boolean;
begin
Result:=Zip_CheckBox.Checked;
end;

procedure Hide(Sender: TObject);
begin
if Zip_CheckBox.Checked = true then
begin
WizardForm.DirEdit.Enabled := not(Zip_CheckBox.Checked);
WizardForm.DirBrowseButton.Enabled := not(Zip_CheckBox.Checked);
WizardForm.DirEdit.Text := ExpandConstant('{tmp}\{#Save_Folder}');

Zip_Path_Edit.Enabled := Zip_CheckBox.Checked;
Zip_Path_Button.Enabled := Zip_CheckBox.Checked;
Zip_Path_Edit.Text := ExpandConstant('{userdesktop}');
end
else
begin
WizardForm.DirEdit.Enabled := True;
WizardForm.DirBrowseButton.Enabled := True;
WizardForm.DirEdit.Text := ExpandConstant('{userdesktop}\{#Save_Folder}');

Zip_Path_Edit.Enabled := false;
Zip_Path_Button.Enabled := false;
Zip_Path_Edit.Text := 'путь архива';
end;
end;

procedure DirOnClick(Sender: TObject);
var
DirEditString: String;
begin
DirEditString := WizardForm.DirEdit.Text;
if BrowseForFolder('Выберите папку из списка и нажмите «ОК»', DirEditString, True) then
begin
Zip_Path_Edit.Text := DirEditString;
// WizardForm.NextButton.OnClick(WizardForm.NextButton)
end;
end;

procedure InitializeWizard;
begin

with WizardForm do
begin
MainPanel.Visible := false;
Bevel1.Visible := false;
Bevel.Visible := false;
InnerNotebook.Width := WizardForm.Width;
InnerNotebook.Height := WizardForm.Height;
OuterNotebook.Width := WizardForm.Width;
OuterNotebook.Height := WizardForm.Height;
CancelButton.BringToFront;
NextButton.BringToFront;
BackButton.BringToFront;
SelectDirBitmapImage.Visible := False;
DiskSpaceLabel.Visible := False;
SelectDirBrowseLabel.Visible := False;
Caption := '';
SelectDirLabel.Visible := false;
DirEdit.Top := ScaleY(220);
DirBrowseButton.Top := WizardForm.DirEdit.Top;
end;

{ Zip_CheckBox }
Zip_CheckBox := TNewCheckBox.Create(WizardForm);
with Zip_CheckBox do
begin
Name := 'Zip_CheckBox';
Parent := WizardForm.SelectDirPage;
Left := ScaleX(120);
Top := ScaleY(112);
Width := ScaleX(97);
Height := ScaleY(17);
Caption := 'сделать архив';
OnClick := @Hide;
end;

{ Zip_Path_Edit }
Zip_Path_Edit := TNewEdit.Create(WizardForm);
with Zip_Path_Edit do
begin
Name := 'Zip_Path_Edit';
Parent := WizardForm.SelectDirPage;
Left := ScaleX(8);
Top := ScaleY(152);
Width := ScaleX(297);
Height := ScaleY(21);
Enabled := False;
Text := 'путь архива';
end;

{ Zip_Path_Button }
Zip_Path_Button := TNewButton.Create(WizardForm);
with Zip_Path_Button do
begin
Name := 'Zip_Path_Button';
Parent := WizardForm.SelectDirPage;
Left := ScaleX(312);
Top := ScaleY(152);
Width := ScaleX(75);
Height := ScaleY(25);
Caption := 'обзор';
Enabled := False;
OnClick := @DirOnClick;
end;

end;


procedure CurStepChanged(CurStep: TSetupStep);
var
Res: Integer;
s1, s2, s3, s4, s5: string;

begin
if CurStep = ssPostInstall then
begin
if Zip_CheckBox.Checked = true then
begin
s1 := 'a -sfx7z.sfx -mx9';
s2 := Addquotes(Zip_Path_Edit.Text);
s3 := Addquotes(ExpandConstant('{tmp}\{#Save_Folder}'));


ExtractTemporaryFile('7za.exe');
ExtractTemporaryFile('7z.sfx');
Exec(ExpandConstant('{tmp}\7za.exe'), s1 + ' ' + s2 + ' ' + s3, ExpandConstant('{tmp}'), SW_SHOW, ewWaitUntilTerminated, Res);
end;
end;
end;




procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm := False;
end;





последняя версия
http://sendfile.su/586087

R.i.m.s.k.y.
04-05-2012, 16:53
Johny777, вот ты чудак-человек, тёдиты умеешь страяпать а грамматику не знаешь :tongue:
я строго наоборот
1. у меня тут инно не стоит я не знаю как работает AddBackslash, в начало она добавлет \ или в конец
1.1 есть обратная функция, по памяти RemoveBackSlashUntilRoot, в справке глянь точно
2. предположу простое
Exec(ExpandConstant('{tmp}\7za.exe'), s1 + ' ' + s2 ' ' + s3 + +' saved.exe', ExpandConstant('{tmp}'), SW_SHOW, ewWaitUntilTerminated, Res);
3. Не знаю что у тебя там в переменных но учти что кавычки AddQuotes нужны на полный путь вместе с именем файла, в середине строки их быть не должно
7z.exe "это запаковать" "вот сюда" параметры
4. мх9 это макс сжатие, долго, рамы жрет 1700метров (если склероз не изменяет), ставь mx1

procedure CurStepChanged(CurStep: TSetupStep);
var
Res: Integer;
s1, s2, s3, s4, s5: string;

begin
if CurStep = ssPostInstall then
begin
if Zip_CheckBox.Checked = true then
begin
s1 := 'a -sfx7z.sfx -mx9';
s2 := Addquotes(RemoveBackSlashUntilRoot(Zip_Path_Edit.Text)+'\saved.exe');
s3 := Addquotes(ExpandConstant('{tmp}\{#Save_Folder}'));

//s4 := 'saved';
//s4 := AddBackslash('saved');
//s4 := AddBackslash('saved.exe');


ExtractTemporaryFile('7za.exe');
ExtractTemporaryFile('7z.sfx');
Exec(ExpandConstant('{tmp}\7za.exe'), s1 + ' ' + s2 + ' ' + s3, ExpandConstant('{tmp}'), SW_SHOW, ewWaitUntilTerminated, Res);
end;
end;
end;

Johny777
04-05-2012, 17:23
7z.exe "это запаковать" "вот сюда" параметры »
изначально так
7za a -sfx7z.sfx C:\saved.exe -mx9 C:\saved
расширю строку:
7za a -sfx7z.sfx -mx9.......C:\saved.exe.............C:\saved
........параметры...............куда\во что...............откуда (файлы,папки)
в инно
Exec(ExpandConstant('{tmp}\7za.exe'), s1 + ' ' + s2 + ' ' + s3, ExpandConstant('{tmp}'), SW_SHOW, ewWaitUntilTerminated, Res);
расширю для чтения:
Exec(ExpandConstant('{tmp}\7za.exe'),......s1.............................................s2........ .......................................................s3.................................ExpandCons tant('{tmp}'), SW_SHOW, ewWaitUntilTerminated, Res);
.......................................запустить.......параметры...........текст другого эдита(куда архив).................{tmp}\saved (отсюда файлы)......
те логика такая
если отмечен чекбоск "создать архив", то родной Dir.Edit блокируется и всё папки/фалы бэкапа из секции [Files] копируются в папку {tmp}\saved
получаем
s3 := Addquotes(ExpandConstant('{tmp}\saved')) ......... (откуда)
s2 := Addquotes(Zip_Path_Edit.Text); ......(куда). Например на рабочий стол (уже архив.exe)
s1 := 'a -sfx7z.sfx -mx9';.............(параметры) Не меняется


Трогать s3 нельзя. Файлам прямая дорога только в папку темпа, которая после успешной установки удалится.
s1 - параметры
Т.е. всё крутится вокруг s2, который может быть любым путём + название архива
на данный момент только это получается (пример из строки в начале)
вместо
C:\saved.exe --получаем-- C:\.exe
те вместо saved.exe --получаем-- .exe

так тоже не получается
s2 := Addquotes(RemoveBackslashUnlessRoot(Zip_Path_Edit.Text)+'saved.exe';
и так
s2 := Addquotes(RemoveBackslashUnlessRoot(Zip_Path_Edit.Text)+'\saved.exe';
проблема с \во что
RemoveBackSlashUntilRoot »
да опечатался малость :)
вот
RemoveBackslashUnlessRoot
ставь mx1 »
ok
( в планах есть комбобокс с выботом "среднее(), лёгкое(mx1), сильное (много меньше mx9)" )

R.i.m.s.k.y.
04-05-2012, 18:16
Johny777, не получается? добавь в конец MSGBOX (твоя проблемная строка)
вслепую сложно догадываться, надо хрустальный шар полировать

Johny777
04-05-2012, 18:32
R.i.m.s.k.y.,
истина где-то рядом
вот почти заработало
при
s2 := Addquotes(RemoveBackslashUnlessRoot(Zip_Path_Edit.Text)+'\saved.exe');
в пути где в конце нет обратного слэша \ всё в порядке
C:\test
в пути, где в конце он есть
C:\
архив не создаётся
Насчёт месседжбокса даже не знаю куда его прикрутить
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
очень интересные результаты сжатия
http://img692.imageshack.us/img692/5976/32236167.png (http://imageshack.us/photo/my-images/692/32236167.png/)
думаю оставлю выбор на mx3 и mx5, ведь лишних 200 метров оперативки найдёт каждый!

R.i.m.s.k.y.
04-05-2012, 19:05
Johny777, MsgBox('тут кроется лажа' + #13#10 + ExpandConstant('{tmp}\7za.exe'), s1 + ' ' + s2 + ' ' + s3, mbInformation, MB_OK);
procedure CurStepChanged(CurStep: TSetupStep);
var
Res: Integer;
s1, s2, s3, s4, s5: string;

begin
if CurStep = ssPostInstall then
begin
if Zip_CheckBox.Checked = true then
begin
s1 := 'a -sfx7z.sfx -mx9';
s2 := Addquotes(RemoveBackSlashUntilRoot(Zip_Path_Edit.Text)+'\saved.exe');
s3 := Addquotes(ExpandConstant('{tmp}\{#Save_Folder}'));
MsgBox('тут кроется лажа' + #13#10 + ExpandConstant('{tmp}\7za.exe'), s1 + ' ' + s2 + ' ' + s3, mbInformation, MB_OK);

//s4 := 'saved';
//s4 := AddBackslash('saved');
//s4 := AddBackslash('saved.exe');


ExtractTemporaryFile('7za.exe');
ExtractTemporaryFile('7z.sfx');
Exec(ExpandConstant('{tmp}\7za.exe'), s1 + ' ' + s2 + ' ' + s3, ExpandConstant('{tmp}'), SW_SHOW, ewWaitUntilTerminated, Res);
end;
end;
end;

Johny777
04-05-2012, 20:01
R.i.m.s.k.y.,
сделал (месседж бокс, упростил и изменил немного логику)
и без меммедж бокса понятно в чём проблема
Вот две строки. При той что не закоментирована всё отлично

if not (FileCopy(ExpandConstant('{tmp}\saved.exe'), ExpandConstant('{userdesktop}\saved.exe'), True)) then
//if not (FileCopy(ExpandConstant('{tmp}\saved.exe'), 'C:\saved.exe', True)) then
MsgBox('Обломись!', mbInformation, MB_OK);

целиком

procedure CurStepChanged(CurStep: TSetupStep);
var
Res: Integer;
s3, s2: string;

begin
if CurStep = ssPostInstall then
begin
if Zip_CheckBox.Checked = true then
begin
s2 := Addquotes(ExpandConstant('{tmp}\saved.exe'));
s3 := Addquotes(ExpandConstant('{tmp}\{#Save_Folder}'));

ExtractTemporaryFile('7za.exe');
ExtractTemporaryFile('7z.sfx');

Exec(ExpandConstant('{tmp}\7za.exe'), 'a -sfx7z.sfx -mx3' + ' ' + s2 + ' ' + s3, ExpandConstant('{tmp}'), SW_SHOW, ewWaitUntilTerminated, Res);
if not (FileCopy(ExpandConstant('{tmp}\saved.exe'), ExpandConstant('{userdesktop}\saved.exe'), True)) then
//if not (FileCopy(ExpandConstant('{tmp}\saved.exe'), 'C:\saved.exe', True)) then
MsgBox('Обломись!', mbInformation, MB_OK);
end;
end;
end;


при той что закоментирована появляется сообщение
бред какой-то

http://sendfile.su/586233

R.i.m.s.k.y.
04-05-2012, 20:16
Johny777, балин, камрад, я дал тебе готовую строчку чтобы увидеть что ты там склеиваешь, нафига мне твое обломись?

Johny777
05-05-2012, 02:14
R.i.m.s.k.y.,
Ты "секретные материалы" (Малдеры, Скали всякие) смотрел?
вот две строки
if not (FileCopy(ExpandConstant('{tmp}\saved.exe'), ExpandConstant('{userdesktop}\saved.exe'), True)) then
//if not (FileCopy(ExpandConstant('{tmp}\saved.exe'),'C:\saved.exe', True)) then
при первой архив копируется на рабочий стол, а при второй в C:\ нет (констант нет. Прямой путь)
Как это понимать?
Самое натуральная аномалия. Скрипт живёт своей жизнью! :)


Касательно твоего месседж бокса.Хотел с ним потестить. С ошибкой синтаксиса вылетает (исправить не смог).
Пока что тупик как не крути.

R.i.m.s.k.y.
05-05-2012, 09:28
Johny777,
тебя ничего не смущает?
http://rghost.ru/37919963/image.png (http://rghost.ru/37919963.view)

procedure CurStepChanged(CurStep: TSetupStep);
var
Res: Integer;
s1, s2, s3, s4, s5: string;

begin
if CurStep = ssPostInstall then
begin
if Zip_CheckBox.Checked = true then
begin

s2 := Addquotes(Zip_Path_Edit.Text);
//s2 := Addquotes(ExpandConstant('{tmp}\saved.exe'));
s3 := Addquotes(ExpandConstant('{tmp}\{#Save_Folder}'));
MsgBox('Пути архивации' + #13#10 + 'a -sfx7z.sfx -mx3' + ' ' + s2 + ' ' + s3, mbInformation, MB_OK);

//s3 := Addquotes(RemoveBackslashUnlessRoot(ExpandConstant('{tmp}\{#Save_Folder}')))+'saved.exe';
ExtractTemporaryFile('7za.exe');
ExtractTemporaryFile('7z.sfx');
Exec(ExpandConstant('{tmp}\7za.exe'), 'a -sfx7z.sfx -mx3' + ' ' + s2 + ' ' + s3, ExpandConstant('{tmp}'), SW_SHOW, ewWaitUntilTerminated, Res);
if not (FileCopy(ExpandConstant('{tmp}\saved.exe'), ExpandConstant('{userdesktop}\saved.exe'), True)) then
//if not (FileCopy(ExpandConstant('{tmp}\saved.exe'), 'C:\saved.exe', True)) then
MsgBox('тут кроется лажа, тк не копируется', mbInformation, MB_OK);
end;
end;
end;


второе: для копирования лучше использовать не встроенные функции инно а комстроку
procedure copy1file(fromfile, tofile:string);
begin
Exec('cmd.exe', ' /c copy /Y /V /B ' + AddQuotes(fromfile) + ' ' + AddQuotes(tofile),ExpandConstant('{sys}'), SW_Hide,ewWaitUntilTerminated,res);
end;
Вот сейчас твой архив saved.exe скопировался на рабочий стол но инсталлер написал что нет

Johny777
05-05-2012, 12:57
R.i.m.s.k.y.,
спасибо за помощь добрый человек!

всё работает:

procedure CurStepChanged(CurStep: TSetupStep);
var
Res: Integer;
s1, s2, s3, s4, s5: string;

begin
if CurStep = ssPostInstall then
begin
if Zip_CheckBox.Checked = true then
begin
s2 := Addquotes(ExpandConstant('{tmp}\saved')); /// вот здесь и была лажа,
s3 := Addquotes(ExpandConstant('{tmp}\{#Save_Folder}'));
MsgBox('Пути архивации' + #13#10 + 'a -sfx7z.sfx -mx3' + ' ' + s2 + ' ' + s3, mbInformation, MB_OK);

ExtractTemporaryFile('7za.exe');
ExtractTemporaryFile('7z.sfx');
Exec(ExpandConstant('{tmp}\7za.exe'), 'a -sfx7z.sfx -mx3' + ' ' + s2 + ' ' + s3, ExpandConstant('{tmp}'), SW_SHOW, ewWaitUntilTerminated, Res);

Exec('cmd.exe', ' /c copy /Y /V /B ' + AddQuotes(ExpandConstant('{tmp}\saved.exe')) + ' ' + Addquotes(Zip_Path_Edit.Text),ExpandConstant('{sys}'), SW_Hide,ewWaitUntilTerminated,res);
end;
end;
end;


сохраняет куда надо и как надо

R.i.m.s.k.y.
05-05-2012, 13:07
спасибо за помощь добрый человек!
сохраняет куда надо и как надо »

пжлста
Выпей за мое богатство! :)

El Sanchez
05-05-2012, 13:11
тебя ничего не смущает? »
R.i.m.s.k.y., а тебя не смущает, что после AddQuotes переменные s2, s3 должны быть уже закавыченными, а MsgBox говорит обратное? У части пользователей ОС >= Vista и у всех пользователей ОС <= XP вызов 7za.exe приведет к ошибке из-за незакавыченных путей. Нужно отказаться от корявой AddQuotes и писать все ручками, и второе - незачем архив сохранять в темпе, а потом героически копировать в другое место (Рабочий стол), создавай сразу там.


procedure CurStepChanged(CurStep: TSetupStep);
var
Res: Integer;
s3, s2: string;

begin
if CurStep = ssPostInstall then
begin
if Zip_CheckBox.Checked then
begin
s2 := ExpandConstant('{userdesktop}\saved.exe'); //разумеется, сюда можно включать необходимые кавычки и отделяющие пробелы
s3 := ExpandConstant('{tmp}\{#Save_Folder}'); //... и сюда, но напишем их в Exec

ExtractTemporaryFile('7za.exe');
ExtractTemporaryFile('7z.sfx');

Exec(ExpandConstant('{tmp}\7za.exe'), 'a -sfx7z.sfx -mx3 "' + s2 + '" "' + s3 + '"', ExpandConstant('{tmp}'), SW_SHOW, ewWaitUntilTerminated, Res);
end;
end;
end

R.i.m.s.k.y.
05-05-2012, 13:16
El Sanchez Johny777, смутило но я подумал что это особенность msgbox
Спасибо что сказал, переделаю и у себя (хотя никто не жалился еще)
Проще сделать AddQuotes2, а то об эти кавыки в Ехес глаза пообломаешь

function AddQuotes2(www : string) : string;
begin
Result := '"' + www + '"';
end;


procedure CurStepChanged(CurStep: TSetupStep);
var
Res: Integer;
s3, s2: string;

begin
if CurStep = ssPostInstall then
begin
if Zip_CheckBox.Checked then
begin
s2 := ExpandConstant('{userdesktop}\saved.exe'); //разумеется, сюда можно включать необходимые кавычки и отделяющие пробелы
s3 := ExpandConstant('{tmp}\{#Save_Folder}'); //... и сюда, но напишем их в Exec

ExtractTemporaryFile('7za.exe');
ExtractTemporaryFile('7z.sfx');

Exec(ExpandConstant('{tmp}\7za.exe'), 'a -sfx7z.sfx -mx3' + ' ' + AddQuotes2(s2) + ' ' + AddQuotes2(s3), ExpandConstant('{tmp}'), SW_SHOW, ewWaitUntilTerminated, Res);
end;
end;
end

El Sanchez
05-05-2012, 13:28
я подумал что это особенность msgbox »
Нет, скорей уж это особенность AddQuotes, принимающей строку от ExpandConstant.
Проще сделать AddQuotes2 »
Чего уж проще, захламить код ненужными функциями :)

R.i.m.s.k.y.
05-05-2012, 13:38
Чего уж проще, захламить код ненужными функциями »
намного проще снизить читабельность кода ;)

Johny777
05-05-2012, 16:33
пжлста
Выпей за мое богатство! »
нажрусь до поросячьего визга по возможности и тебя вспомню добрым словом, но не сейчас! :)
El Sanchez,
спасибо, что пришёл и поправил!
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
у меня вопрос
с архивацией всё отлично
Вот код на сами сохранения (поиск по расширению в отдельных папках и сравнения размеров файлов - всё работает), но меня смущает, то что без этого инсталл не запускается

function InitializeSetup(): Boolean;
begin
Result:=True; /// вот этого
end;

Также если рядом есть файлы которые он ищет, то окно появляется тут же, а если нет, то с тормозами через пару секунд
Скажите пожалуйста где я опять накосячил при укорачивании и адаптации под свои нужды "поиск по расширению" их шапки?

#define MyAppName "Backup"
#define Save_Folder "saved"

[Setup]
SourceDir=.
OutputDir=Source Engine 15\uninstall
AppName={#MyAppName}
AppVerName={#MyAppName}
AppVersion={#MyAppName}
//CreateAppDir=false
DefaultDirName={userdesktop}\{#Save_Folder}
OutputBaseFilename={#MyAppName}
Uninstallable=false
ShowLanguageDialog=auto
LanguageDetectionMethod=uilanguage

DisableWelcomePage=yes
DisableReadyPage=yes


[Files]
Source: {src}\..\common\half-life 2\bin\stats.bin; DestDir: {app}\common\half-life 2\bin; Flags: external ignoreversion recursesubdirs createallsubdirs; Check: save_A_hl2
Source: {src}\..\common\half-life 2 episode one\bin\stats.bin; DestDir: {app}\common\half-life 2 episode one\bin; Flags: external ignoreversion recursesubdirs createallsubdirs; Check: save_A_ep1
Source: {src}\..\common\half-life 2 episode two\bin\stats.bin; DestDir: {app}\common\half-life 2 episode two\bin; Flags: external ignoreversion recursesubdirs createallsubdirs; Check: save_A_ep2
Source: {src}\..\common\portal\bin\stats.bin; DestDir: {app}\common\portal\bin; Flags: external ignoreversion recursesubdirs createallsubdirs; Check: save_A_portal
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Source: {src}\..\common\half-life 2\hl2\SAVE\*; DestDir: {app}\common\half-life 2\hl2\SAVE; Flags: external ignoreversion recursesubdirs createallsubdirs; Check: save_SAVES_hl2
Source: {src}\..\common\half-life 2 episode one\episodic\SAVE\*; DestDir: {app}\common\half-life 2 episode one\episodic\SAVE; Flags: external ignoreversion recursesubdirs createallsubdirs; Check: save_SAVES_ep1
Source: {src}\..\common\half-life 2 episode two\ep2\SAVE\*; DestDir: {app}\common\half-life 2 episode two\ep2\SAVE; Flags: external ignoreversion recursesubdirs createallsubdirs; Check: save_SAVES_ep2
Source: {src}\..\common\portal\portal\SAVE\*; DestDir: {app}\common\portal\portal\SAVE; Flags: external ignoreversion recursesubdirs createallsubdirs; Check: save_SAVES_portal


[ Code]
/////////////////////////////////////////
var
hl2_A_CheckBox: TNewCheckBox;
ep1_A_CheckBox: TNewCheckBox;
ep2_A_CheckBox: TNewCheckBox;
portal_A_CheckBox: TNewCheckBox;

hl2_SAVE_CheckBox: TNewCheckBox;
ep1_SAVE_CheckBox: TNewCheckBox;
ep2_SAVE_CheckBox: TNewCheckBox;
portal_SAVE_CheckBox: TNewCheckBox;
/////////////////////////////////////////
function save_A_hl2: Boolean;
begin
Result:=hl2_A_CheckBox.Checked;
end;

function save_A_ep1: Boolean;
begin
Result:=ep1_A_CheckBox.Checked;
end;

function save_A_ep2: Boolean;
begin
Result:=ep2_A_CheckBox.Checked;
end;

function save_A_portal: Boolean;
begin
Result:=portal_A_CheckBox.Checked;
end;
///////////////////////////////////////
function save_SAVES_hl2: Boolean;
begin
Result:=hl2_SAVE_CheckBox.Checked;
end;

function save_SAVES_ep1: Boolean;
begin
Result:=ep1_SAVE_CheckBox.Checked;
end;

function save_SAVES_ep2: Boolean;
begin
Result:=ep2_SAVE_CheckBox.Checked;
end;

function save_SAVES_portal: Boolean;
begin
Result:=portal_SAVE_CheckBox.Checked;
end;


////////////////////////// поиск фала по маске //// начало
var
// задаём переменную глобально, для всего скрипта
Mask: string;


function FindFile(Path: string): Boolean;
var
FSR: TFindRec;
FindResult: Boolean;

begin
Result:= False;
if Path[Length(Path)] <> '\' then Path:= Path + '\';
FindResult:= FindFirst(Path + Mask, FSR);
try
while FindResult do
begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
Result:= True;
Exit;
end;
FindResult:= FindNext(FSR);
end;
finally
FindClose(FSR);
end;
end;

function InitializeSetup(): Boolean;
begin
Result:=True;
end;
///////// конец


procedure Enable(Sender: TObject);
begin
WizardForm.NextButton.Enabled := hl2_A_CheckBox.Checked or ep1_A_CheckBox.Checked or ep2_A_CheckBox.Checked or portal_A_CheckBox.Checked or hl2_SAVE_CheckBox.Checked or ep1_SAVE_CheckBox.Checked or ep2_SAVE_CheckBox.Checked or portal_SAVE_CheckBox.Checked;
end;



procedure InitializeWizard;
var
Size: Integer;
i: Integer;
ArrayOfMask: TArrayOfString;
StartFolder, StartFolder2, StartFolder3, StartFolder4: string;

begin
with WizardForm do
begin
MainPanel.Visible := false;
Bevel1.Visible := false;
Bevel.Visible := false;
InnerNotebook.Width := WizardForm.Width;
InnerNotebook.Height := WizardForm.Height;
OuterNotebook.Width := WizardForm.Width;
OuterNotebook.Height := WizardForm.Height;
CancelButton.BringToFront;
NextButton.BringToFront;
BackButton.BringToFront;
SelectDirBitmapImage.Visible := False;
DiskSpaceLabel.Visible := False;
SelectDirBrowseLabel.Visible := False;
Caption := '';
SelectDirLabel.Visible := false;
DirEdit.Top := ScaleY(220);
DirBrowseButton.Top := WizardForm.DirEdit.Top;
end;
////////////////////////////////////////////////// чекбоксы достижений
hl2_A_CheckBox := TNewCheckBox.Create(WizardForm);
with hl2_A_CheckBox do
begin
Name := 'hl2_A_CheckBox';
Parent := WizardForm.SelectDirPage;
Left := ScaleX(150);
Top := ScaleY(132);
Width := ScaleX(97);
Height := ScaleY(17);
Caption := 'достижения hl2';
Enabled := False;
OnClick :=@Enable;
end;
if FileSize(ExpandConstant('{src}\..\common\half-life 2\bin\stats.bin'), size) then
if Size > 1078 then
hl2_A_Checkbox.Enabled:=true;

ep1_A_CheckBox := TNewCheckBox.Create(WizardForm);
with ep1_A_CheckBox do
begin
Name := 'ep1_A_CheckBox';
Parent := WizardForm.SelectDirPage;
Left := ScaleX(150);
Top := ScaleY(70);
Width := ScaleX(97);
Height := ScaleY(17);
Caption := 'достижения ep1';
Enabled := False;
OnClick :=@Enable;
end;
if FileSize(ExpandConstant('{src}\..\common\half-life 2 episode one\bin\stats.bin'), size) then
if Size > 517 then
ep1_A_CheckBox.Enabled:=true;

ep2_A_CheckBox := TNewCheckBox.Create(WizardForm);
with ep2_A_CheckBox do
begin
Name := 'ep2_A_CheckBox';
Parent := WizardForm.SelectDirPage;
Left := ScaleX(150);
Top := ScaleY(40);
Width := ScaleX(97);
Height := ScaleY(17);
Caption := 'достижения ep2';
Enabled := False;
OnClick :=@Enable;
end;
if FileSize(ExpandConstant('{src}\..\common\half-life 2 episode two\bin\stats.bin'), size) then
if Size > 759 then
ep2_A_CheckBox.Enabled:=true;

portal_A_CheckBox := TNewCheckBox.Create(WizardForm);
with portal_A_CheckBox do
begin
Name := 'portal_A_CheckBox';
Parent := WizardForm.SelectDirPage;
Left := ScaleX(150);
Top := ScaleY(10);
Width := ScaleX(97);
Height := ScaleY(17);
Caption := 'достижения portal';
Enabled := False;
OnClick :=@Enable;
end;
if FileSize(ExpandConstant('{src}\..\common\portal\bin\stats.bin'), size) then
if Size > 550 then
portal_A_CheckBox.Enabled:=true;
//////////////////////////////////////////////////// чекбоксы сохранений
hl2_SAVE_CheckBox := TNewCheckBox.Create(WizardForm);
with hl2_SAVE_CheckBox do
begin
Name := 'hl2_SAVE_CheckBox';
Parent := WizardForm.SelectDirPage;
Left := ScaleX(8);
Top := ScaleY(132);
Width := ScaleX(97);
Height := ScaleY(17);
Caption := 'сохранения hl2';
Enabled := False;
OnClick :=@Enable;
end;
ep1_SAVE_CheckBox := TNewCheckBox.Create(WizardForm);
with ep1_SAVE_CheckBox do
begin
Name := 'ep1_SAVE_CheckBox';
Parent := WizardForm.SelectDirPage;
Left := ScaleX(8);
Top := ScaleY(70);
Width := ScaleX(97);
Height := ScaleY(17);
Caption := 'сохранения ep1';
Enabled := False;
OnClick :=@Enable;
end;
ep2_SAVE_CheckBox := TNewCheckBox.Create(WizardForm);
with ep2_SAVE_CheckBox do
begin
Name := 'ep2_SAVE_CheckBox';
Parent := WizardForm.SelectDirPage;
Left := ScaleX(8);
Top := ScaleY(40);
Width := ScaleX(97);
Height := ScaleY(17);
Caption := 'сохранения ep2';
Enabled := False;
OnClick :=@Enable;
end;
portal_SAVE_CheckBox := TNewCheckBox.Create(WizardForm);
with portal_SAVE_CheckBox do
begin
Name := 'portal_SAVE_CheckBox';
Parent := WizardForm.SelectDirPage;
Left := ScaleX(8);
Top := ScaleY(10);
Width := ScaleX(97);
Height := ScaleY(17);
Caption := 'сохранения portal';
Enabled := False;
OnClick :=@Enable;
end;
/////////////////////////////////////////////
StartFolder:= ExpandConstant('{src}\..\common\half-life 2\hl2\SAVE'); // задаём папку откуда начинать поиск
StartFolder2:= ExpandConstant('{src}\..\common\half-life 2 episode one\episodic\SAVE'); // задаём папку откуда начинать поиск
StartFolder3:= ExpandConstant('{src}\..\common\half-life 2 episode two\ep2\SAVE'); // задаём папку откуда начинать поиск
StartFolder4:= ExpandConstant('{src}\..\common\portal\portal\SAVE'); // задаём папку откуда начинать поиск
ArrayOfMask:= ['*.sav']; // заполняем массив масок для поиска
for i:= 0 to GetArrayLength(ArrayOfMask)-1 do // перебираем весь масив масок
begin
Mask:= ArrayOfMask[i];
if FindFile(StartFolder) then hl2_SAVE_Checkbox.Enabled := true;
if FindFile(StartFolder2) then ep1_SAVE_CheckBox.Enabled := true;
if FindFile(StartFolder3) then ep2_SAVE_CheckBox.Enabled := true;
if FindFile(StartFolder4) then portal_SAVE_CheckBox.Enabled := true;
end;



end;


procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm := False;
end;


procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then
begin
WizardForm.NextButton.Enabled := false;
end;
end;



или архив с файлами
http://sendfile.su/586804




© OSzone.net 2001-2012