Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: Zorbbb
Дата сообщения: 03.11.2013 19:46
log1stable
Вас понял, а примеры есть?

И вдогонку, как обозначается минимальная версия семёрки и 8-ой винды?
В смысле MinVersion:
Автор: log1stable
Дата сообщения: 03.11.2013 21:00
sjwrec, верно, для этого надо будет перейти, поэтому я и скинул компилятор. Думаю, скоро китайские друзья вшьют сию новинку в расширенную версию. Сам я, кстати, юзаю обычную версию - качественнее получается.
Автор: sjwrec
Дата сообщения: 04.11.2013 09:17
log1stable

Цитата:
обычную версию - качественнее получается.


Ну здесь я не совсем согласен с Вами:

во первых у расширенной версии функционал выше (особенно у Unicode),

во вторых - хакнуть сетап прогой InnoUnpack уже не выйдет. В то время как обычная вскрывается легко.

в третьих у расширенной версии есть улучшенный компилятор, в котором есть: подсказки кода (варианты), редактор форм, возможность закомментровать/раскоментровать кусок кода и ещё много всего по мелочи...

Да и что касается качества - то каких-то особых различий не заметил, сетап проверяю на ОС: XPSP3, 7 ,8 - всё ОК.

Пользуюсь ANSI версией 5.5.1 ee1

Автор: log1stable
Дата сообщения: 04.11.2013 09:23
В общем, на оценку кидаю сетаппер. Нужно ваше мнение о юзабилити. Да и если ошибки выскочат, тоже было бы неплохо о них узнать: http://rghost.ru/49921595
Автор: sjwrec
Дата сообщения: 04.11.2013 09:47
Zorbbb

MinVersion: 0,6.1 - для 7
MinVersion: 0,6.2 - для 8
MinVersion: 0,6.3 - для 8.1

Но если не работает - то можно так:

[more]

[Code]
var
ResultVer, ResultX64, ResultStart: Integer;

procedure isWinVer();
var
Version: TWindowsVersion;
begin
ResultVer:= 0;
GetWindowsVersionEx(Version);

// Возможные варианты:
// только для 7 (Version.Minor = 1)
// только для 8 (Version.Minor = 2)
// только для 8.1 (Version.Minor = 3)
// только для 8 и 8.1 (Version.Minor = 2 < 4) меньше 4 это защита от установки в версии старше 8.1.

If ((Version.Major = 6) and (Version.Minor = 2 < 4)) then ResultVer:= 1;
end;

//procedure isX64(); // раскоментировать если нужна проверка на разрядность
//begin
//ResultX64:= 0;
//If IsWin64 then ResultX64:= 1; // или If not IsWin64 для x86
//end;

function InitializeSetup(): Boolean;
begin
isWinVer();
//isX64(); // раскоментировать если нужна проверка на разрядность
ResultStart:= ResultVer //+ ResultX64; // раскоментировать если нужна проверка на разрядность
if ResultStart = 1 then begin // заменить на ResultStart = 2 - если нужна проверка на разрядность
Result:= True;
end
else
begin
MsgBox('Данный компонент предназначен только для Windows 8 / 8.1 - x64'+#13#13+'Установка завершает работу.', mbError, MB_OK);
Result:= False;
end;
end;

[/more]
Автор: log1stable
Дата сообщения: 04.11.2013 10:08
Я так понял, в Inno нет многопоточности. Как можно реализовать проверку md5-сумм файлов больших размеров? А то при стандартно GetMD5OfFile процесс виснет надолго.
Автор: sjwrec
Дата сообщения: 04.11.2013 10:14
log1stable
Сетап работает нормально - ошибок не найдено.
Проверка хеш (md5) не шла, пришлось пропустить.
Юзабельность нормальная не сложно.
Система: Windows 8 Профессиональная x86.
Автор: log1stable
Дата сообщения: 04.11.2013 10:36
sjwrec, проверка и не пойдет. Я не реализовал её, ибо не знаю, каким образом. Видимо, придется её убрать совсем. Так, создал рабочую страницу.
Автор: sjwrec
Дата сообщения: 04.11.2013 16:25
log1stable
Лично я не люблю эту проверку, идёт очень долго. Лучше показать пользователю сообщение "Выполнить проверку целостности файлов?" Да Нет. И если да, то показывать эту страницу, нет - пропустить. Так будет лучше - моё мнение.
Автор: MISHANCHYK
Дата сообщения: 05.11.2013 01:36
Подскажите пожалуйста, можно ли вносить данные в реестр при деинсталяции?
Автор: log1stable
Дата сообщения: 05.11.2013 04:43
MISHANCHYK есть процедуры InitializeUninstallProgressForm (при которой создается форма деинсталлятора) и CurUninstallStepChanged(CurUninstallStep: TUninstallStep); (аналог CurStepChanged, в ней есть шаги: usAppMutexCheck, usUninstall, usPostUninstall, usDone) При usDone, например, можно сделать запись в реестр программно:
RegWriteStringValue(HKEY_CURRENT_USER, 'Software\My Company\My Program',
'UserName', ExpandConstant('{sysuserinfoname}'));
Автор: MISHANCHYK
Дата сообщения: 05.11.2013 07:22
log1stable, спасибо. А можно скрипт с примером?
Автор: sjwrec
Дата сообщения: 05.11.2013 08:37
MISHANCHYK исходя из примера log1stable
будет выглядеть так:
[more]
[Code]

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usDone then
begin
RegWriteStringValue(HKEY_CURRENT_USER, 'Software\My Company\My Program', 'UserName', ExpandConstant('{sysuserinfoname}'));
end;
end;
[/more]
Автор: trolltmn
Дата сообщения: 05.11.2013 09:16
Доброго времени суток господа. Загадка на логику. Возможно ли сделать перезагрузку страницы в процедуре?

пример:

Есть у меня кнопка на форме, которая появляется по условию, если есть файл в папке установки, то появляется, если нет то нет. Если же файла нет, то появляется кнопка 2.

есть кнопка которая по процедуре удаляет этот файл.

можно ли перезагрузить страницу по окончании выполнения кнопки удаления? что бы вместо первой кнопки появилась вторая?
Автор: Tapas77789
Дата сообщения: 05.11.2013 09:33
log1stable

Цитата:
Я так понял, в Inno нет многопоточности. Как можно реализовать проверку md5-сумм файлов больших размеров? А то при стандартно GetMD5OfFile процесс виснет надолго.

ISMD5_Example
Автор: log1stable
Дата сообщения: 05.11.2013 13:27
trolltmn, поподробнее участок кода с появлением кнопки, и подскажу.

Tapas77789, о, замечательно, спасибо.
Автор: trolltmn
Дата сообщения: 05.11.2013 14:10

Цитата:
trolltmn, поподробнее участок кода с появлением кнопки, и подскажу.



Код:
wplicense:
begin
ImgSetVisibility(work1,True);
PageNameLabel.Show;
ClClientlbl.Show;
// отработка кнопки бэкапа
if RegQueryStringValue(HKEY_LOCAL_MACHINE, '{#reg_path}','InstallLocation', BcbRes) then begin
Result1:= BcbRes;
end
else
if RegQueryStringValue(HKEY_LOCAL_MACHINE, '{#reg_path_64}','InstallLocation', BcbRes) then begin
Result1:= BcbRes;
end
else
BcbRes:='{#Def_path}';
if FileExists(BcbRes+'\{#back_nname}') then begin
BtnSetVisibility(Backbtn,True);
BtnSetVisibility(UnBackbtn,True);
BtnSetVisibility(BackDelbtn,True);
CrBackuplbl.Show;
ExBackuplbl.Show;
ClBackuplbl.Show;
end else begin
BtnSetVisibility(Backbtn,True);
BtnSetVisibility(UnBackbtn,False);
CrBackuplbl.Show;
end;
BtnSetVisibility(ClearCLbtn,True);
//конец обработки бэкапа
end;
Автор: alexandrevil
Дата сообщения: 05.11.2013 14:56
Доброго времени суток !
Ищу инстоллятор как у Джова для мод паков с определением директории установки.
Заранее спасибо !
Автор: nik1967
Дата сообщения: 05.11.2013 15:00

Цитата:
ISMD5_Example

О_о, какие старые примеры
Автор: sjwrec
Дата сообщения: 05.11.2013 17:39
Прошу помощи, есть кусок кода - который должен отображать форму во время копирования файлов во временную папку. Проблема в том, что форма полностью отрисовывается только после копирования файлов. Можно ли это исправить?

[more=Код]
// [TEMPER v1.0]

[Files]
Source: Graphics\Images\1.ico; Flags: dontcopy

[Code]
var
TemperForm: TSetupForm;
TemperLabel: TLabel;
TemperIcon: TNewIconImage;

function RunTemper(): Boolean; // Копирование файлов во временную папку.
begin

ExtractTemporaryFile('1.ico');

TemperForm:= CreateCustomForm;
with TemperForm do begin
Width:= 340;
Height:= 90;
BorderIcons:= [];
BorderStyle:=bsNone;
Position:= poScreenCenter;
Color:= clSilver;
Visible:= True;
end;

TemperIcon:= TNewIconImage.Create(TemperForm);
with TemperIcon do begin
Parent := TemperForm;
SetBounds(ScaleX(5),ScaleY(20),ScaleX(48),ScaleY(48));
Icon.LoadFromFile(ExpandConstant('{tmp}\1.ico'));
Visible:= True;
end;

TemperLabel:= TLabel.Create(TemperForm);
with TemperLabel do begin
Parent:= TemperForm;
Top:= 30;
Left:= 60;
Height:= 20;
AutoSize:= True;
Transparent:=True;
Caption:= 'Инициализация SJW Install Wizard...'
Font.Color := clBlack;
Font.Size:= 12;
Visible:= True;
end;

#ifdef Video
if not FileExists(ExpandConstant('{tmp}\Video.avi')) then ExtractTemporaryFile('Video.avi');
#endif

#ifdef AutorunModul
if not FileExists(ExpandConstant('{tmp}\autorun.jpg')) then ExtractTemporaryFile('autorun.jpg');
#endif

#ifdef SlideShowModul
#else
if not FileExists(ExpandConstant('{tmp}\background.jpg')) then ExtractTemporaryFile('background.jpg');
#endif

MsgBox('пауза', mbInformation, MB_OK); // этот MsgBox мне нужен только для остановки процесса, во время тестирования

TemperForm.Free;
end;
end;
[/more]

Добавлено:
alexandrevil

Цитата:
для мод паков с определением директории установки.


Не знаю о ком идёт речь, но определение директории берётся из реестра. Но не стоит пологатся целиком на реестр, так как пользователь легко может переместить папку в другое место. Нужно сделать проверку. Если указанный в реестре путь существует физически, то взять этот путь для установки мода, если нет - то показать кнопку Обзор и пусть пользователь сам ищет путь к папке которую переместил.

Думаю на форуме найдутся подобные примеры, поищите. Если не найдёте, обращайтесь постораюсь написать пример.
Автор: alexandrevil
Дата сообщения: 05.11.2013 19:35
sjwrec вот что-то типо этого...
только без кнопок со ссылками на велкомлабел !
http://yadi.sk/d/cnvPmc21By9SA
заранее спасибо !
Автор: Tapas77789
Дата сообщения: 05.11.2013 22:09
del


Автор: sjwrec
Дата сообщения: 06.11.2013 08:37
alexandrevil

Цитата:
вот что-то типо этого... только без кнопок со ссылками на велкомлабел !

Ого, размер крупноват для моего трафика. Лучше скринов накидайте в архив и положите в Rghost


Добавлено:
Tapas77789

Цитата:
Какие были такие и выложил.

И на том спасибо, пригодится.
Автор: MISHANCHYK
Дата сообщения: 06.11.2013 09:33
sjwrec, спасибо.
Автор: nik1967
Дата сообщения: 06.11.2013 10:00

Цитата:
Имеете новые, выкладывайте новые. Какие были такие и выложил.
Что то я не понял, что мы такие нервные? Новые само собой имею, но встроенные в инсталлятор R.G. Catalyst. Отдельно примеры не писал, так, как никто и не просил.
Автор: Tapas77789
Дата сообщения: 06.11.2013 10:06
nik1967

Цитата:
Что то я не понял, что мы такие нервные? Новые само собой имею, но встроенные в инсталлятор R.G. Catalyst. Отдельно примеры не писал, так, как никто и не просил.

Извиняюсь, просто день не задался.
Автор: sjwrec
Дата сообщения: 06.11.2013 11:37
nik1967
Можете помочь с этим кодом?
Нужно чтоб форма отрисовывалась раньше чем начнётся копирование файлов.
[more=Код]
// [TEMPER v1.0]

[Files]
Source: Graphics\Images\1.ico; Flags: dontcopy

[Code]
var
TemperForm: TSetupForm;
TemperLabel: TLabel;
TemperIcon: TNewIconImage;

function RunTemper(): Boolean; // Копирование файлов во временную папку.
begin

ExtractTemporaryFile('1.ico');

TemperForm:= CreateCustomForm;
with TemperForm do begin
Width:= 340;
Height:= 90;
BorderIcons:= [];
BorderStyle:=bsNone;
Position:= poScreenCenter;
Color:= clSilver;
Visible:= True;
end;

TemperIcon:= TNewIconImage.Create(TemperForm);
with TemperIcon do begin
Parent := TemperForm;
SetBounds(ScaleX(5),ScaleY(20),ScaleX(48),ScaleY(48));
Icon.LoadFromFile(ExpandConstant('{tmp}\1.ico'));
Visible:= True;
end;

TemperLabel:= TLabel.Create(TemperForm);
with TemperLabel do begin
Parent:= TemperForm;
Top:= 30;
Left:= 60;
Height:= 20;
AutoSize:= True;
Transparent:=True;
Caption:= 'Инициализация SJW Install Wizard...'
Font.Color := clBlack;
Font.Size:= 12;
Visible:= True;
end;

#ifdef Video
if not FileExists(ExpandConstant('{tmp}\Video.avi')) then ExtractTemporaryFile('Video.avi');
#endif

#ifdef AutorunModul
if not FileExists(ExpandConstant('{tmp}\autorun.jpg')) then ExtractTemporaryFile('autorun.jpg');
#endif

#ifdef SlideShowModul
#else
if not FileExists(ExpandConstant('{tmp}\background.jpg')) then ExtractTemporaryFile('background.jpg');
#endif

MsgBox('пауза', mbInformation, MB_OK); // этот MsgBox мне нужен только для остановки процесса, во время тестирования

TemperForm.Free;
end;
end;
[/more]
Заранее спасибо!
Автор: alexandrevil
Дата сообщения: 06.11.2013 11:37
http://rghost.ru/49976081

Что он делает как я заметил.
Если выбрать установку звонок крита, то он из папки соунд копирует все файлы в папку рес_модс и только потом туда втыкает этот звонок...
Если не выбрана папку где находиться клиент то он не начнет установку.

Там еще 3 страницы не стал фоткать, лицензия, и две инфы, до установки и после.

Что нужно если позволите:
- упаковывать в себе папку с модами (mods) в которой будет допустим еще папок 10, в которых в свою очередь будут моды.
- находил директорию игры и сразу предлагал место установки.
- мог копировать игровые файлы из одной папки в другую.

Жаль что не можете скачать, было бы информативнее...
Но все равно заранее спасибо !
Автор: nik1967
Дата сообщения: 06.11.2013 14:32

Цитата:
Можете помочь с этим кодом?
[more=У меня так получилось]
Код: #Define Video

[setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Files]
Source: 1.ico; Flags: dontcopy
Source: Video.avi; Flags: dontcopy

[_Code]
function RunTemper(): Boolean; // Копирование файлов во временную папку.
var
TemperForm: TSetupForm;
TemperLabel: TLabel;
TemperIcon: TNewIconImage;

begin
ExtractTemporaryFile('1.ico');

TemperForm:= CreateCustomForm;
with TemperForm do begin
ClientWidth:= ScaleX(340);
ClientHeight:= ScaleY(90);
BorderStyle:=bsNone;
Color:= clSilver;
Center;

TemperIcon:= TNewIconImage.Create(TemperForm);
with TemperIcon do begin
SetBounds(ScaleX(5),ScaleY(20),ScaleX(48),ScaleY(48));
Icon.LoadFromFile(ExpandConstant('{tmp}\1.ico'));
Parent:= TemperForm;
end;

TemperLabel:= TLabel.Create(TemperForm);
with TemperLabel do begin
Top:= ScaleY(30);
Left:= ScaleX(60);
Height:= ScaleY(20);
Width:=ScaleX(260);
Transparent:= True;
Caption:= 'Инициализация SJW Install Wizard...'
Font.Color:= clBlack;
Font.Size:= 12;
Parent:= TemperForm;
end;

TemperForm.Show;
TemperForm.Refresh;
end;

#ifdef Video
if not FileExists(ExpandConstant('{tmp}\Video.avi')) then ExtractTemporaryFile('Video.avi');
#endif

#ifdef AutorunModul
if not FileExists(ExpandConstant('{tmp}\autorun.jpg')) then ExtractTemporaryFile('autorun.jpg');
#endif

#ifdef SlideShowModul
if not FileExists(ExpandConstant('{tmp}\background.jpg')) then ExtractTemporaryFile('background.jpg');
#endif

TemperForm.Free;
end;

function InitializeSetup(): Boolean;
begin
RunTemper();
Result:= true;
end;
Автор: sjwrec
Дата сообщения: 06.11.2013 18:06
nik1967
Вот это да! А я ведь знал про Refresh окна, но вот почемуто ступил )
Сейчас делаю репак старой игры Assassin's Creed но с новым патчем 1.2.
Скоро выложу скрипт 6.3 R1. Для завершения нужно было решить только эту проблему.
Большое спасибо!

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758

Предыдущая тема: Только инсталлятор


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.