Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 4]
Johny777
03-05-2012, 12:54
BlackInferno,
Настоятельно советую прочитать русскую справку http://sendfile.su/570136 (все секции!)
BlackInferno
03-05-2012, 13:07
Настоятельно советую прочитать русскую справку http://sendfile.su/570136 (все секции!) »
Так я и прочитал. Вот и говорю, что сеция [Tasks] не держит теги Types.
Вообщем все получилось, но
И вот еще вопрос:
Как сделать так, чтобы на странице "Дополнительных задач" была написана дополнительная строчка: "Установка дополнительного ПО:", а потом уже шли мои компоненты? Точно так же как "Дополнительные значки:" и два флажка - у меня чуть ниже "Дополнительное ПО:" и два флажка.
А то как-то не очень красиво получается:
http://i37.fastpic.ru/thumb/2012/0503/8e/12463d2461edb4db950010d82c88cd8e.jpeg (http://fastpic.ru/view/37/2012/0503/12463d2461edb4db950010d82c88cd8e.png.html)
R.i.m.s.k.y.
03-05-2012, 13:12
BlackInferno, да, таск на этот флаг должен ругнуться
давай свой код
Devils Night, nik1967, цимес в секции [Setup], это основная секция установщика для создания инсталлера, так что Components к ней применить нельзя
BlackInferno
03-05-2012, 13:14
Вот в дополнение к моему предыдущему посту.
Хочу что бы было вот так:
http://i35.fastpic.ru/thumb/2012/0503/f9/96fe1b499bdfbf2b64c4989ed419c8f9.jpeg (http://fastpic.ru/view/35/2012/0503/96fe1b499bdfbf2b64c4989ed419c8f9.png.html)
Как это прописать?
Devils Night, nik1967, цимес в секции [Setup], это основная секция установщика для создания инсталлера, так что Components к ней применить нельзя »
А при чём тут я? Я и так это знаю уже очень давно.
Johny777
03-05-2012, 13:16
BlackInferno,
Справка --- Секция скриптов --- секция [Tasks] --- GroupDescription
Так я и прочитал. »
:(
А при чём тут я? »
Ты просто оказался не в том месте не в то время. Вот и загребли! :)
Devils Night
03-05-2012, 13:38
Как это прописать? »
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
UninstallDisplayIcon={app}\MyProg.exe
OutputDir=.
[Tasks]
Name: a; Description: Компонент 1; GroupDescription: Описание группы
Name: b; Description: Компонент 2; GroupDescription: Описание группы
Name: c; Description: Компонент 1; GroupDescription: Описание группы 2
Name: d; Description: Компонент 2; GroupDescription: Описание группы 2
P.S Я жеж не зря за него заикнулся, а теперь 100 вопросов получайте!
nik1967, Johny777, Спасибо! По коду всё сложно, короче ладу не дам, хотел компонент прикрутить к #define, т.е
#define code; Components: a
#ifdef code
#endif, в общем по видимому никак проще нельзя :(.
BlackInferno
03-05-2012, 13:39
nik1967, вылазит галочка перед ПО:
http://i33.fastpic.ru/thumb/2012/0503/db/c4fa09c216bc4c7b933b6a1dec3f03db.jpeg (http://fastpic.ru/view/33/2012/0503/c4fa09c216bc4c7b933b6a1dec3f03db.png.html)
Как ее убрать?
Вот скрипт:
[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked; OnlyBelowVersion: 0,6.1
Name: Redist; Description: Дополнительное программное обеспечение:
Name: Component1; Description: DirectX; Flags: checkablealone
Name: Component2; Description: GameSpy Arcade; Flags: checkablealone
[hr]
[Setup]
ShowTasksTreeLines=true »
А что это дает? Разницы не заметил.
R.i.m.s.k.y.
03-05-2012, 13:41
BlackInferno,
у тебя же перед носом ответ в двух строчках выше
[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked; OnlyBelowVersion: 0,6.1
Name: Component1; Description: DirectX; Flags: checkablealone; GroupDescription: Дополнительное программное обеспечение
Name: Component2; Description: GameSpy Arcade; Flags: checkablealone; GroupDescription: Дополнительное программное обеспечение
BlackInferno
03-05-2012, 13:50
Попробую так:
[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked; OnlyBelowVersion: 0,6.1
Name: Component1; Description: DirectX; GroupDescription: Дополнительное программное обеспечение:; Flags: checkablealone
Name: Component2; Description: GameSpy Arcade; GroupDescription: Дополнительное программное обеспечение:; Flags: checkablealone
Devils Night
03-05-2012, 13:54
А что это дает? Разницы не заметил. »ShowTasksTreeLines - Это Показать линии дерева задач.
R.i.m.s.k.y.
03-05-2012, 13:56
ShowTasksTreeLines=true »
А что это дает? Разницы не заметил. »
тонкие линии на странице задач
видна при наличии дочерних и родительстких компонентов, у тебя их нет и линии тоже нет
checkablealone позволяет выбирать дочерний флажок без выбора родительского, справка рулит
BlackInferno
03-05-2012, 14:05
Все, супер, наконец-то все отлично!
Всем спасибо за помощь!
Johny777
03-05-2012, 18:36
Вопрос
у меня на странице 6 чекбоксов
как блокировать кнопку "далее" если ни один не отмечен?
WizardForm.SelectDirPage.OnChange разве есть?
R.i.m.s.k.y.
03-05-2012, 18:41
Johny777, через NextButtonClick не пройдет?
function NextButtonClick(CurPageID:integer): Boolean;
begin
Result:= True;
if (CurPageID = твоя тсраница) then begin
if (проверка чекбоксов) then Result := False;
end
else Result := True;
end; //if (CurPageID = твоя тсраница)
end;
или делаешь чекалку кликов свой страницы и добавляешь в ней
WizardForm.NextButton.Enabled:= False else WizardForm.NextButton.Enabled:= True;
вот к примеру у меня на списке компонентов:
procedure ComponentOnClick(Sender: TObject);
begin
if CheckComponents = '' then WizardForm.NextButton.Enabled:= False else WizardForm.NextButton.Enabled:= True;
WizardForm.ComponentsList.Repaint;
end;
procedure InitializeWizard();
...
WizardForm.ComponentsList.OnClick := @ComponentOnClick;
Johny777
03-05-2012, 20:14
R.i.m.s.k.y.,
сделал так
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;
а каждому из 6 чекбоксов приписал OnClick :=@Enable;
Тк например ep2_SAVE_CheckBox.Checked всё равно что True, как и все остальные
кнопка далее упорно не хотела блокироваться в InitializeWizard, зато так работает:
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then
begin
WizardForm.NextButton.Enabled := false;
end;
end;
хотя все страницы выключены(какие были - "приветствия" и "готовности"). То бишь это (wpSelectDir) первая страница.
R.i.m.s.k.y.
03-05-2012, 20:16
Johny777, у тебя самолепные чекбоксы? я про них не знай, звиняй
Johny777
04-05-2012, 04:05
Подскажите пожалуйста
после копирования идёт сжатие в самоизвлекающийся 7Zip.exe
#define MyAppName "Backup"
#define Save_Folder "saved"
[Setup]
SourceDir=.
OutputDir=Source Engine 15\uninstall
AppName={#MyAppName}
AppVerName={#MyAppName}
AppVersion={#MyAppName}
DefaultDirName=C:\{#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]
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;
ExtractTemporaryFile('7za.exe');
ExtractTemporaryFile('7z.sfx');
end;
function CreateBatFile(): boolean;
var
StrArr: TArrayOfString;
begin
Result := false;
SetArrayLength(StrArr, 3);
StrArr[0]:='7za a -sfx7z.sfx C:\saved.exe -mx9 C:\saved';
StrArr[1]:='@echo off';
StrArr[2]:='pause';
if SaveStringsToFile(ExpandConstant('{tmp}\compressor.bat'), StrArr, False) then Result:=true;;
end;
procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode: Integer;
begin
if CurStep = ssPostInstall then
begin
// создаем BAT файл
if not CreateBatFile() then MsgBox('BAT файл не записан', mbInformation, mb_OK)
// запускаем BAT файл
if not Exec(ExpandConstant('{tmp}\compressor.bat'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then MsgBox('Проблема с запуском BAT файла', mbInformation, mb_OK)
end;
end;
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm := False;
end;
столкнулся с проблемой добавления текста из WizardForm.DirEdit (констант)
Т.е. батник должен паковать файлы из папки {app} в архив saved.exe
Это всё (код сверху, вложенный архив снизу) работает, но стоит мне начать добавлять '7za a -sfx7z.sfx'+ExpandConstant('{app}')+ '-mx9 C:\saved', то результат - ошибка параметров при запуске батника! :)
http://sendfile.su/585755 - архив со всем необходим
В общем дальше не знаю!
Есть у кого мысли?
Возможность паковать в sfx архив нужна в бэкапе для того чтобы в основном инсталле (посредством чекбокса например) восстановить все сохранения и достижения! :)
R.i.m.s.k.y.
04-05-2012, 08:06
Johny777, не качая архив вижу что в '7za a -sfx7z.sfx' нет концевых пробелов, т.е. у тебя получается в батнике 7za a -sfx7z.sfxС:\Program Files\Proga
Но даже если добавишь пробелы '_7za a -sfx7z.sfx_' все равно будет ошибка - батник длинные пути с пробелами не понимает, если есть русские буквы в пути батник должен быть CP866, а инно пишет CP1251. Так что с русскими буквами даже не пытайся, переводи все в секцию кода
В общем вотттаг ' 7za a -sfx7z.sfx '+AddQuotes(ExpandConstant('{app}')) сделай, будет ошибка - покажешь ошибку
И в конце батника добавь pause чтобы видеть что он пишет
Кстати никогда не понимал батников в инно, нем же есть секция кода!
Johny777
04-05-2012, 12:37
отказался от батника!
вот
перенёс
так работает :)
procedure CurStepChanged(CurStep: TSetupStep);
var
Res: Integer;
begin
if CurStep = ssPostInstall then
begin
ExtractTemporaryFile('7za.exe');
ExtractTemporaryFile('7z.sfx');
Exec(ExpandConstant('{tmp}\7za.exe'), 'a -sfx7z.sfx -mx9 C:\saved.exe C:\saved', ExpandConstant('{tmp}'), SW_SHOW, ewWaitUntilTerminated, Res);
end;
end;
так нет :(
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 := ExpandConstant('{userdesktop}\saved.exe');
s3 := ExpandConstant('{app}');
ExtractTemporaryFile('7za.exe');
ExtractTemporaryFile('7z.sfx');
Exec(ExpandConstant('{tmp}\7za.exe'), 's1 + s2 + s3', ExpandConstant('{tmp}'), SW_SHOW, ewWaitUntilTerminated, Res);
end;
end;
может с пробелами накосячил?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.