Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 3]
По поводу первого вопроса.
Собрав инфу по частям сделал следующий пример:
[Code]
procedure UpdateIni();
var
IniFileName: String;
StrArray: TArrayOfString;
begin
IniFileName := ChangeFileExt(ExpandConstant(CurrentFileName), '.ini'); // 1
if not IniKeyExists('settings', 'TestName', IniFileName) then begin // 2
SetArrayLength(StrArray, 2);
StrArray[0] := '; name и по русски то же';
StrArray[1] := 'TestName=name.txt';
SaveStringsToFile(IniFileName, StrArray, True);
end else begin
SetIniString('settings', 'newTestName', 'newname.txt', IniFileName); // 3
end;
end;
Проблема в том, что для отработки кода в строке 2, в *.ini файле необходима запись:
[settings]
TestName=firstName.txt
А мне нужна реакция на
;settings
TestName=firstName.txt
Строка кода 3, вставляет в *.ini файл данные следующего содержания:
[settings]
newTestName=newname.txt
А мне опять таки надо:
;settings
newTestName=newname.txt
Гуру, помогите плз.
Все. Первый вопрос отпал сам собой. Однако, если кто-то найдет решение, то я с удовольствием его посмотрю, т.к. проблема может возникнуть снова.
Родился следующий вопрос.
После инсталяции приложения, мне необходимо размножить (или скопировать) одну из папок. Скачав InnoSetupFAQ_ru-board.chm я нашел там решение этой проблемы с помощью скрипта "SHFileOperation.iss". Однако при удалении приложения эти размноженные папки не удаляются, а хотелось бы, что бы удалялись.
Что для этого нужно сделать?
R.i.m.s.k.y.
26-07-2011, 15:39
вообще-то в инишниках [...] - секции, а ";" - комментарии
придется "руками" через код писать файл раз надо, смотри в сторону SaveStringsToFile, в InnoSetupFAQ_ru-board.chm и шапке есть примеры,
в InnoSetupFAQ_ru-board.chm помоему вообще что тебе нужно один-в-один
Как сделать, чтобы дополнительно создать новую страницу и туда перенести задачи раздела [Tasks], чтобы при их выборе происходило копирование в ini-файл, в зависимости от того, что выбрано (из чекбоксов)?
После инсталяции приложения, мне необходимо размножить (или скопировать) одну из папок. Скачав InnoSetupFAQ_ru-board.chm я нашел там решение этой проблемы с помощью скрипта "SHFileOperation.iss". Однако при удалении приложения эти размноженные папки не удаляются, а хотелось бы, что бы удалялись.
Что для этого нужно сделать? »
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usDone then
begin
if DirExists(ExpandConstant('{app}\')) then
DelTree(ExpandConstant('{app}'), True, True, True);
end;
end;
может пригодится функция замены текста в текстовом файле
procedure RePlaceTextinFile(FilePath:string; find:string; replace:string);
var
S: TArrayOfString;
//str : string;
i : Integer;
begin
if not FileExists(FilePath) then begin MsgBox('Файл не найден ' + FilePath, mbError, mb_Ok); Exit;end; // если файла нет, выходим
LoadStringsFromFile(FilePath, S); // загружаем файл
for i:= 0 to GetArrayLength(S)-1 do begin
if (Pos(AnsiUpperCase(find), AnsiUpperCase(S[i])) > 0) then begin
StringChangeEx(S[i], find, replace, True);
end;
end;
SaveStringsToFile(FilePath, S, False); // сохраняем файл
end;
Habetdin
26-07-2011, 15:55
procedure CurUninstallStepChanged »
Еще можно без секции [code]:
[UninstallDelete]
Name: {app}; Type: filesandordirs
R.i.m.s.k.y.
26-07-2011, 15:59
Еще можно без секции [code]: »
знаю но не всегда срабатывает
R.i.m.s.k.y., возможно Вы имели ввиду пример, описанный в InnoSetupFAQ_ru-board.chm, однако...
1. При использовании процедуры CurStepChanged(CurStep: TSetupStep); для копирования данных папки создаются, а вот данные туда не копируются. В связи с этим сделал свою процедуру, которая стартует сразу после установки необходимой папки:
Source: "C:\test\Folder0\*"; DestDir: "{app}\Folder0\"; AfterInstall: CopyFolder(); Flags: ignoreversion recursesubdirs createallsubdirs
2. Я не могу понять как удалить созданные папки, если они у меня создаются в зависимости от указанного пользователем значения при установке приложения. Т.е. Я не могу сделать в процедуре CurUninstallStepChanged(CurUninstallStep: TUninstallStep); следующее:
CopyDir(ExpandConstant('{app}\Folder1\'),ExpandConstant('{app}'));
CopyDir(ExpandConstant('{app}\Folder2\'),ExpandConstant('{app}'));
т.к. количество вводится только во время установки.
Кстати, почему в примере CopyDir()? Это описался человек или так и должно быть?
R.i.m.s.k.y., Ваша процедура удаления CurUninstallStepChanged(CurUninstallStep: TUninstallStep); работет более корректно. Все вопросы по удалению отпали.
Большое спасибо за подсказку.
R.i.m.s.k.y.
26-07-2011, 17:06
В связи с этим сделал свою процедуру, которая стартует сразу после установки необходимой папки: »
и она отрабатывает над каждым файлом в папке
советую копировать папку куда надо без AfterInstall, а потом второй строчкой один мелкий файлик уже с AfterInstall
Source: "C:\test\Folder0\*"; DestDir: "{app}\Folder0\"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "C:\test\Folder0\ww.txt"; DestDir: "{app}\Folder0\"; AfterInstall: CopyFolder(); Flags: ignoreversion recursesubdirs createallsubdirs
Ваша процедура удаления CurUninstallStepChanged »
она не моя, она системная
и можно на ты, меня не покоробит :)
и она отрабатывает над каждым файлом в папке
Спасибо за пояснения.
В Examples при установке inno setup лежит прекрасный пример (Components.iss) по построению установщика с выбором разных "уровней сложности":
[Types]
Name: "full"; Description: "Full installation"
Name: "compact"; Description: "Compact installation"
Name: "custom"; Description: "Custom installation"; Flags: iscustom
Вопрос. Как после выбора "Full installation" попасть сразу в последнее окно, а, например, при выборе "Compact installation" поставить сначало дно из своих окон?
Например вот такое:
var
UserPage: TInputQueryWizardPage;
procedure InitializeWizard;
begin
UserPage := CreateInputQueryPage(wpWelcome,
'Дополнительная информация', 'ВНИМАНИЕ! Все поля должны быть заполнены',
'Пожалуйста введите количество wrlr, которые необходимо установить '+
'на рабочую станцию и нажмите клавишу next');
UserPage.Add('Количество wrlr:', False);
UserPage.Add('ни о чем:', True); // Скрытый текст
end;
З.Ы.
Текст из Components.iss
; -- Components.iss --
; Demonstrates a components-based installation.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES!
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
UninstallDisplayIcon={app}\MyProg.exe
OutputDir=userdocs:Inno Setup Examples Output
[Types]
Name: "full"; Description: "Full installation"
Name: "compact"; Description: "Compact installation"
Name: "custom"; Description: "Custom installation"; Flags: iscustom
[Components]
Name: "program"; Description: "Program Files"; Types: full compact custom; Flags: fixed
Name: "help"; Description: "Help File"; Types: full
Name: "readme"; Description: "Readme File"; Types: full
Name: "readme\en"; Description: "English"; Flags: exclusive
Name: "readme\de"; Description: "German"; Flags: exclusive
[Files]
Source: "MyProg.exe"; DestDir: "{app}"; Components: program
Source: "MyProg.chm"; DestDir: "{app}"; Components: help
Source: "Readme.txt"; DestDir: "{app}"; Components: readme\en; Flags: isreadme
Source: "Readme-German.txt"; DestName: "Liesmich.txt"; DestDir: "{app}"; Components: readme\de; Flags: isreadme
[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
insombia
26-07-2011, 17:20
Всем привет,как сделать чтобы прогресс бар со временем перемещался на середину и так далее типа как у механиков?
insombia, я сам хочу узнать
insombia, LinkOFF, всмысле в середину?? так (http://forum.ru-board.com/topic.cgi?forum=5&topic=35848&start=1355&limit=1&m=1#1) штоле?
p.s. надо было так и спросить: "как уменьшить страницу установки и переместить?"
insombia
27-07-2011, 14:35
Rikill не так а когда идет установка то через определённое время прогресс бар с начала перескакивал на середину у каталистов тоже такое было
у каталистов тоже такое было »
Ну и зачем? Мы наоборот стараемся добиться плавного прогрессбара. Красивше же :good:
Gnom_aka_Lexander
27-07-2011, 15:22
insombia, Такто у них библиотечка IsExec для этого, но от дерганого прогресса они уже отказались. А так, похожего эффекта можно добиться с помощью такого кода:
procedure CurStepChanged(CurStep: TSetupStep);
var ResultCode,step:integer;
begin
step:=WizardForm.ProgressGauge.Max/5; // шаг приравниваем максимальной позиции прогрессбара деленной на количество запускаемых анпакеров.
if CurStep=ssInstall then
begin
Exec(ExpandConstant('{app}\анпакер1.exe'), 'параметры для анпакера', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
WizardForm.ProgressGauge.Position:=WizardForm.ProgressGauge.Position+step;
Exec(ExpandConstant('{app}\анпакер2.exe'), 'параметры для анпакера', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
WizardForm.ProgressGauge.Position:=WizardForm.ProgressGauge.Position+step;
Exec(ExpandConstant('{app}\анпакер3.exe'), 'параметры для анпакера', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
WizardForm.ProgressGauge.Position:=WizardForm.ProgressGauge.Position+step;
Exec(ExpandConstant('{app}\анпакер4.exe'), 'параметры для анпакера', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
WizardForm.ProgressGauge.Position:=WizardForm.ProgressGauge.Position+step;
Exec(ExpandConstant('{app}\анпакер5.exe'), 'параметры для анпакера', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
WizardForm.ProgressGauge.Position:=WizardForm.ProgressGauge.Max;
end;
end; в связке с рестулсовской ExecAndWait.
nik1967, ты не знаешь как мне исправить вот это
http://i25.fastpic.ru/big/2011/0727/7e/9c5a9f23ead8969b4ce1b9805b4ddc7e.jpg
insombia
27-07-2011, 15:44
LinkOFF а что именно нужно исправить?
LinkOFF а что именно нужно исправить? »
Надписи прозрачными сделать, надо чтоб картинка видна была в WizardSmallImage
insombia
27-07-2011, 15:51
LinkOFF можно и через скрипт уменьшить обьем картинки и не будет такого как у тебя
можно и через скрипт уменьшить обьем картинки и не будет такого как у тебя »
Да я знаю, но мне вообще прозрачность убрать надо, чтоб надписи ложились на вставляемую картинку
insombia
27-07-2011, 16:02
А как сделать чтобы не писалось распаковывается там какой то файл а просто распаковка файлов а какие именно чтобы не указывалось?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC