Показать полную графическую версию : [архив] Скрипты Inno Setup. Помощь и советы [часть 2]
Lancer2404
12-12-2009, 19:46
Serega если можно,примерный код выложите если не сложно.
И у меня такой вопрос.Имею код для создание бекапа.Но бекапит только то что в корне.А че дописать чтобы и в подпапках бекапил.
[Tasks]
Name: arc; Description: "Сделать резервную копию файлов"
[Code]
var
Page: TInputDirWizardPage;
ArcDir: String;
procedure CreateBackup();
var
SrcFile, DestFile: string;
begin
if IsTaskSelected('arc') then
begin
ForceDirectories(ArcDir);
SrcFile:= AddBackslash(ExpandConstant('{app}')) + ExtractFileName(CurrentFileName);
DestFile:= AddBackslash(ArcDir) + ExtractFileName(CurrentFileName);
FileCopy(SrcFile, DestFile, False);
end;
end;
function NextButtonClick(CurPageID: Integer): Boolean;
begin
If (CurPageID = Page.ID) then
ArcDir := Page.Values[0];
Result:= True;
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
If (PageID = Page.ID) and
(Not IsTaskSelected('arc')) then
Result:= True
else Result:= False;
end;
procedure InitializeWizard();
begin
Page:= CreateInputDirPage(wpSelectTasks, 'Выберите папку бэкапа.',
'Куда вы засуните файлы бэкапа.Оттуда вы сможете восстановить свои файлы',
'Для продолжения нажмите далее.' + #10#13#10#13 +
'Если хотите выбрать другую папку щелкните Обзор.',
False, 'Backup');
Page.Add('');
Page.Values[0] := ExpandConstant('{sd}\GTAIV\Backup');
end;
Имею код для создание бекапа.Но бекапит только то что в корне.А че дописать чтобы и в подпапках бекапил. »
Чтоб не изобретать велосипед, в Справка, руководство, примеры есть Коллекция скриптов, в архиве есть скрипт SHFileOperation.iss, где реализована работа с директориями и файлами.
Просто добавляете в самое начало вашего скрипта #include "путь до скрипта\SHFileOperation.iss" и затем используете функцию из этого скрипта.
#include "здесь укажите путь до скрипта..\SHFileOperation.iss"
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[Tasks]
Name: arc; Description: "Сделать резервную копию файлов"
[Code]
var
Page: TInputDirWizardPage;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
Result:= (PageID = Page.ID) and not IsTaskSelected('arc');
end;
procedure InitializeWizard();
begin
Page:= CreateInputDirPage(wpSelectTasks, 'Выберите папку бэкапа.',
'Куда вы засуните файлы бэкапа.Оттуда вы сможете восстановить свои файлы',
'Для продолжения нажмите далее.' + #10#13#10#13 +
'Если хотите выбрать другую папку щелкните Обзор.',
False, 'Backup');
Page.Add('');
Page.Values[0]:= ExpandConstant('{sd}\GTAIV\Backup');
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if (CurStep = ssPreInstall) and IsTaskSelected('arc') then
CopyDir(ExpandConstant('{app}'), Page.Values[0]);
end;
Добрый вечер..
Каким цветом нужно подменять кликабельное лого, для чёрного фона..
Во всех примерных скриптах создания сего идёт "фуксия", а какой нужен именно для чёрного..
Каким цветом нужно подменять кликабельное лого, для чёрного фона..
Во всех примерных скриптах создания сего идёт "фуксия", а какой нужен именно для чёрного.. »
Да цвет там не важен. Просто рисуете логотип на черном фоне и он сливается с черным цветом инсталла.
Лого на чёрном фоне.. Просто картинка отображается как надо..
Такого чуда неполучается добиться используя вот этот код..
var
LogoImage:TBitmapImage;
LogoLabel: TLabel;
procedure LogoOnClick(Sender: TObject);
var ReturnCode: Integer;
begin
ShellExec('open', 'http://......', '', '', SW_SHOWNORMAL, ewNoWait, ReturnCode)
end;
procedure InitializeWizard();
var
LogoPanel : TPanel;
begin
ExtractTemporaryFile('1.bmp');
LogoPanel := TPanel.Create(WizardForm);
with LogoPanel do
begin
Parent := WizardForm;
Left := ScaleX(5);
Top := ScaleY(320);
Width := ScaleX(165);
Height := ScaleY(35);
BevelOuter := bvNone;
end;
LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
Parent := LogoPanel;
Left := ScaleX(0);
Top := ScaleY(0);
AutoSize:=true;
ReplaceColor:=clFuchsia;
ReplaceWithColor:=clBtnFace;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
end;
LogoLabel := TLabel.Create(WizardForm);
with LogoLabel do
begin
Parent := LogoPanel;
Width := LogoPanel.Width;
Height := LogoPanel.Height;
Transparent:=True;
Cursor := crHand;
OnClick:=@LogoOnClick;
end;
end;
Получается только вот что..
http://s39.radikal.ru/i084/0912/c9/98e3119a88a5.png
Такого чуда неполучается добиться используя вот этот код.. »
В коде все правильно. Покажите весь скрипт
Lancer2404
12-12-2009, 21:32
Цитата Lancer2404:
Имею код для создание бекапа.Но бекапит только то что в корне.А че дописать чтобы и в подпапках бекапил. »
Чтоб не изобретать велосипед, в Справка, руководство, примеры есть Коллекция скриптов, в архиве есть скрипт SHFileOperation.iss, где реализована работа с директориями и файлами.
Просто добавляете в самое начало вашего скрипта #include "путь до скрипта\SHFileOperation.iss" и затем используете функцию из этого скрипта.
Пример
Код:
#include "здесь укажите путь до скрипта..\SHFileOperation.iss"
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[Tasks]
Name: arc; Description: "Сделать резервную копию файлов"
[Code]
var
Page: TInputDirWizardPage;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
Result:= (PageID = Page.ID) and not IsTaskSelected('arc');
end;
procedure InitializeWizard();
begin
Page:= CreateInputDirPage(wpSelectTasks, 'Выберите папку бэкапа.',
'Куда вы засуните файлы бэкапа.Оттуда вы сможете восстановить свои файлы',
'Для продолжения нажмите далее.' + #10#13#10#13 +
'Если хотите выбрать другую папку щелкните Обзор.',
False, 'Backup');
Page.Add('');
Page.Values[0]:= ExpandConstant('{sd}\GTAIV\Backup');
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if (CurStep = ssPreInstall) and IsTaskSelected('arc') then
CopyDir(ExpandConstant('{app}'), Page.Values[0]);
end;
------- »
А к файлам надо добавлять BEforeinstall:Createbackup.Или что?А то так не действует
А к файлам надо добавлять BEforeinstall:Createbackup.Или что? »
Данный скрипт копирует, перед началом установки всю папку {app}, вместе со всеми файлами и подпапками:
if (CurStep = ssPreInstall) and IsTaskSelected('arc') then
CopyDir(ExpandConstant('{app}'), Page.Values[0]);
если нужно просто копировать файлы, допустим по маске, то замените CopyDir(ExpandConstant('{app}'), Page.Values[0]);, на
CopyFiles(ExpandConstant('{app}'), Page.Values[0], '*.dll'); - в данном случае будут скопированы все файлы имеющие расширение *.dll
Lancer2404
12-12-2009, 23:11
А если мне надо сделать только копии заменяемых файлов?
А если мне надо сделать только копии заменяемых файлов? »
Вы честное слово, как в одном очень известном фильме... А у вас нет точно такого же, но с сиреневыми пуговицами...
Какой вопрос поставили, такой ответ и получили.
Как вы решили автоматически определить заменяемые файлы? Нужен какой-то список файлов в вашем инсталляторе, затем он сверяется с наличием с именами файлов в каталоге и если имена совпадают, то копирует их. Или все имена прописывать в ручную, т.е. if FileExists(FileName) then копируем...
Serega, еще раз спасибо! Вы как всегда на высоте!
А у вас нет точно такого же, но с сиреневыми пуговицами... » :laugh:
МИШАНЧИК
13-12-2009, 06:20
Serega, подскажите пожалуйста!
Есть:
[Components]
Name: a; Description: Nero™ Reloaded 9.4.2.6; Types: full
Name: a\a; Description: Nero Burning ROM+Nero Express; Types: Full custom; Flags: fixed; ExtraDiskSpaceRequired: 573571408
Name: a\b; Description: Microsoft Visual C++ 2005 SP1; Types: Full custom; Flags: fixed; ExtraDiskSpaceRequired: 3146066
Name: a\c; Description: Nero Vision; Types: full custom; ExtraDiskSpaceRequired: 445644728
Name: a\d; Description: Nero WaveEditor; Types: full custom; ExtraDiskSpaceRequired: 157286001
Name: a\e; Description: Nero CoverDesigner; Types: full custom; ExtraDiskSpaceRequired: 99614249
Name: a\e\a; Description: LightScribe; Types: full custom; ExtraDiskSpaceRequired: 31457413; Flags: dontinheritcheck
Name: a\f; Description: Утилиты; Types: full custom
Name: a\f\a; Description: Nero BurnRights; Types: full custom; ExtraDiskSpaceRequired: 7340104
Name: a\f\b; Description: Nero DiscSpeed; Types: full custom; ExtraDiskSpaceRequired: 7340104
Name: a\f\c; Description: Nero DriveSpeed; Types: full custom; ExtraDiskSpaceRequired: 7340104
Name: a\f\d; Description: Nero InfoTool; Types: full custom; ExtraDiskSpaceRequired: 9437112
Можно ли как-то сделать:
1. Когда снимаешь галку с Name: a\e\a, она автоматом не снималась с Name: a\e?
2. Когда ставишь на Name: a\e, она автоматом не ставилась на Name: a\e\a?
Можно ли как-то сделать »
Добавьте к компоненту a\e, флаг checkablealone, т.е.:
Name: a\e; Description: Nero CoverDesigner; Types: full custom; ExtraDiskSpaceRequired: 99614249; Flags: checkablealone
МИШАНЧИК
13-12-2009, 08:19
Serega, добавил, ничего не изменилось.
Если я снимаю галку с a\e\a, то она автоматом снимается и с a\e и поставить отдельно на a\e нельзя, получается нужно ставить на a\e\a и тогда она автоматом ставиться на a\e. А так было и до флаг checkablealone ».
Может как-то ещё?
Если я снимаю галку с a\e\a, то она автоматом снимается и с a\e и поставить отдельно на a\e нельзя »
Неправда, именно это работает...
получается нужно ставить на a\e\a и тогда она автоматом ставиться на a\e. А так было и до »
Всегда при выборе дочернего компонента, автоматом выбирается родительский, т.к. смысл установки дочернего теряется...
Lancer2404
13-12-2009, 20:07
Цитата Lancer2404:
А если мне надо сделать только копии заменяемых файлов? »
Вы честное слово, как в одном очень известном фильме... А у вас нет точно такого же, но с сиреневыми пуговицами...
Какой вопрос поставили, такой ответ и получили.
Как вы решили автоматически определить заменяемые файлы? Нужен какой-то список файлов в вашем инсталляторе, затем он сверяется с наличием с именами файлов в каталоге и если имена совпадают, то копирует их. Или все имена прописывать в ручную, т.е. if FileExists(FileName) then копируем...
------- »
Но в этом коде меня все устраивает.Вот эти сточки как раз и отвечают за бекап файлов которые копируются.
ForceDirectories(ArcDir);
SrcFile:= AddBackslash(ExpandConstant('{app}\data')) + ExtractFileName(CurrentFileName);
DestFile:= AddBackslash(ArcDir) + ExtractFileName(CurrentFileName);
FileCopy(SrcFile, DestFile, False);
Но в данный момент он делает бекап только файлоа которые копируются в папку data.Как добавить путь для других папок
Пробовал
SrcFile:= AddBackslash(ExpandConstant('{app}\data')) + ExtractFileName(CurrentFileName)+
AddBackslash(ExpandConstant('{app}\data\theme')) + ExtractFileName(CurrentFileName);
непомогло
Serega,
Подскажи как можно переписать по новый пб на стр. удаления?
Полностью ее переделал осталось пб сделать и все.
И еще вопрос можно ли добавить еще 2 стр. которые буду отвечать за запрос о удаление и за сообщение о том что удалены фалы?
ADremLIN
13-12-2009, 23:32
Программа состоит из набора компонентов. Требуется удалять или добавлять выбранные компоненты уже после инсталляции.
То есть я пытаюсь прикрутить UninsHs для Modify/Repair/Remove, но он нифига, как оказалось не делает, кроме добавления своего окна...
Попытка отменить выбор раннее установленных компонентов вызывает это сообщение:
http://www.fileden.com/files/2009/9/18/2578776/QRedMiner/UninsHs-00.jpg
Такое же окно получаю и при повторном запуске инсталлятора :(
Здесь, в закрытом обсуждении, нашел вот это (практически мой случай):
http://forum.oszone.net/showpost.php?p=1169563
http://forum.oszone.net/showpost.php?p=1169728
Вопрос есть ли движение в этом направлении? Если все по-прежнему "глухо", то хотя бы намекните как:
написать руками функцию которая будет смотреть чекнута ли компонента и удалять все ее файлы
а то у меня уже голова кругом идет...
Спасибо.
Как добавить путь для других папок »
Если вас не устраивает предложенный вариант с CopyDir, то посмотрите в Коллекции скриптов, ссылка есть в шапке темы, там есть несколько скриптов с поиском и копированием файлов...
Требуется удалять или добавлять выбранные компоненты уже после инсталляции. »
В любом случае все файлы и папки придётся прописывать руками, т.е. после установки, на финишной странице производите проверку выбранных компонентов и в соответствии с выбором производите манипуляции с файлами...
Попытка отменить выбор раннее установленных компонентов вызывает это сообщение »
Чтоб избежать этого сообщения, добавьте к каждому компоненту флаг disablenouninstallwarning
ADremLIN
14-12-2009, 00:23
В любом случае все файлы и папки придётся прописывать руками, т.е. после установки, на финишной странице производите проверку выбранных компонентов и в соответствии с выбором производите манипуляции с файлами...
Понятно. Все придется делать руками... :(
Спасибо за советы. Буду попробовать.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC