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

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

Автор: Jetr0
Дата сообщения: 18.02.2009 14:27
noiseless
Дело в следующем - мне пришлось перепаковывать программу, так как во первых программа, которая была в стандартном инсталлере (собраном на wise installer) почти годичной давности, поэтому очень устарела, а если обновлять до актуальной версии, то на это уйдет почти 4 часа на нормальной системе, так как обновления выходят где-то раз в неделю, бывает и чаще, поэтому их ну очень много, а если еще и в нескольких копиях ставить... Потом нам приходится работать с людьми, и разными организациями, которые должны использовать данную программу. Так как её настройка очень сложна для среднестатистического юзера, то они тащат системник ко мне, или еще хуже меня отправляют переться через пол города устанавливать и настраивать программу. А по стандарту в большинства или пень третий, или вообще 486, то здесь приходится почти двое суток над ним плясать с бубном, в перерывах перегружая комп. Меня это ну очень достало поэтому я собрал свой инсталятор на Inno, с актуальной версией программы, которую постоянно обновляю, с установленными всеми конфигами, и простом инсталяторе на 4 окна.
Стандартный инсталятор создавал новую ветку, а на Инно просто перезаписывет ту, что уже есть. Вот это мне и нужно исправить.
Автор: Qarma
Дата сообщения: 18.02.2009 15:41

Цитата:
Помогите пожалуйста это реализовать (то что обведено в красную рамку)

skeptik_vdm

Смотрите тут


Цитата:
Наверное имелись ввиду те, где используется freearc(+precomp), там идет прогресс распаковки в отдельный прогрессбар. Вот мне бы тоже было интересно посмотреть на такой скриптик.

de_MAX
Могу полный скрипт дать....с прогресс баром и всякими чтучками
Автор: Yoldosh
Дата сообщения: 18.02.2009 16:14
Пожалуйста подскажите как сделать так чтобы картинка в левом углу с разрешением 164Х314 отображался на весь экран инсталлятора полностью или любая другая картинка с любым разрешением?!? заранее спасибо за помощ!
Автор: Qarma
Дата сообщения: 18.02.2009 16:18

Цитата:
Пожалуйста подскажите как сделать так чтобы картинка в левом углу с разрешением 164Х314 отображался на весь экран инсталлятора полностью или любая другая картинка с любым разрешением?!? заранее спасибо за помощ!

Тоже интересует....подскажите
Автор: Studio13_OutlaW
Дата сообщения: 18.02.2009 16:34
Как сделать, чтобы после нажатия определенной кнопки, например, Button1OnClick...пользователь сраззу переходил к странице Финиша или полностью окно установки закрывалось...(такую же функцию надо как у и cancelonclick)

procedure Button1OnClick(Sender: TObject);


begin
if MsgBox('Ты действительно хочешь выйти?', mbError, MB_YESNO) = idYes then
begin


тут что-то списать наверно надо


end;
end;

Автор: skeptik_vdm
Дата сообщения: 18.02.2009 16:50
Qarma
Спасибо большое очень РАД!!!
А на счет полного скрипта со всякими штучками я б тоже не отказался!!!
Автор: de_MAX
Дата сообщения: 18.02.2009 16:55
Qarma

Цитата:
Могу полный скрипт дать....с прогресс баром и всякими чтучками

Давай конечно)
Автор: Qarma
Дата сообщения: 18.02.2009 17:03
Вот мой скрипт, только там нужны прочие компоненты - dll и картинки, там много лишного конечно....
[more]

[Setup]
AppName=Silent Hill Homecoming
AppVerName=Silent Hill Homecoming Full Rus v1.0 R-E


DefaultDirName=D:\Games\Silent Hill Homecoming
OutputBaseFilename=Setup
Compression=lzma/ultra64
SolidCompression=yes

;+++резделение
DiskSpanning=yes
SlicesPerDisk=1
DiskSliceSize=1560000000
;---резделение

;+++Уровень компрессии
InternalCompressLevel=ultra64
;---Уровень компрессии

UsePreviousAppDir=false
AllowUNCPath=false

;+++Директория выхода инсталятора
OutputDir=D:\test
;---Директория выхода инсталятора
WizardImageFile=compiler:sh5_big.bmp
WizardSmallImageFile=compiler:sh5_small.bmp
ArchitecturesAllowed=x86 x64
ArchitecturesInstallIn64BitMode=x64
DisableProgramGroupPage=true
UsePreviousGroup=false
DefaultGroupName=Silent Hill Homecoming
VersionInfoVersion=1.0.0.0
UninstallFilesDir={app}\
DirExistsWarning=no
DisableReadyPage=true
VersionInfoCompany=© Qarmaa
AppCopyright=© Qarmaa
AppVersion=1.0.0.0
UninstallDisplayName=Silent Hill Homecoming
UsePreviousSetupType=false
UsePreviousUserInfo=false
PrivilegesRequired=none
RestartIfNeededByRun=false
LanguageDetectionMethod=locale
;+++icon.ico это иконка инсталлера!
SetupIconFile=D:\Games\icon.ico
;---icon.ico это иконка инсталлера!
;+++Small.bmp это картинка на верху продолговатая!

;---Small.bmp это картинка на верху продолговатая!
AppPublisherURL=http://Qarmaa.lan


[Languages]
Name: rus; MessagesFile: compiler:\Languages\Russian.isl


[UninstallDelete]
Type: filesandordirs; Name: "{app}"

[Tasks]
Name: "desktopicon"; Description: "Создать ярлык на рабочем столе";
Name: "directx"; Description: "Обновить DirectX 9.0c"; Flags: unchecked;
Name: "bink"; Description: "Обновить RAD Tools (!!ОБЯЗАТЕЛЬНО!!необходимо для руссификации!)";


[LangOptions]
WelcomeFontSize=10

[Icons]
Name: "{group}\Начать игру"; Filename: "{app}\Bin\SilentHill.exe"; WorkingDir: "{app}\";

Name: "{group}\Удалить игру"; Filename: "{uninstallexe}";
Name: "{userdesktop}\Silent Hill HomeComing"; Filename: "{app}\Bin\SilentHill.exe"; WorkingDir: "{app}\Bin\"; Tasks: desktopicon

[Run]
Filename: "{src}\Redist\DXSETUP.exe"; WorkingDir: "{src}\Redist"; StatusMsg: "Обновление DirectX 9.0c, подождите пожалуйста..."; Tasks: "directx";
Filename: "{src}\Redist\setuprad.exe"; WorkingDir: "{src}\Redist"; StatusMsg: "Обновление RAD Tools, подождите пожалуйста..."; Tasks: "bink";

[Files]
Source: "D:\Games\Silent Hill HomeComing\*"; DestDir: "{app}"; Flags: ignoreversion createallsubdirs recursesubdirs sortfilesbyextension
Source: compiler:\InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: C:\Program Files\Inno Setup 5\Corona\Untitled-1.bmp; DestDir: {tmp}; Flags: dontcopy
Source: c:\is7z.dll; DestDir: {tmp}; Flags: dontcopy

[UninstallDelete]
Type: filesandordirs; Name: "{app}"




[Messages]
StatusExtractFiles=Установка файлов игры...
ChangeDiskTitle=Необходим следующий диск.
SelectDiskLabel2=Вставьте следующий диск и нажмите «OK».

[Code]
//////////////
const
NeedSize = 8806;




var
LogoImage:TBitmapImage;
LogoPanel: TPanel;
LogoLabel: TLabel;
FreeMB, TotalMB: Cardinal;

NeedSpaceLabel, FreeSpaceLabel: TLabel;
Comp1, Comp2: TCheckBox;

/////////

//////

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;

begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);

if FreeMB > 1024 then
FreeSpaceLabel.Caption := 'Доступно место на диске: ' + FloatToStr(round(FreeMB/1024*100)/100) + ' GB'
else
FreeSpaceLabel.Caption := 'Доступно место на диске: ' + IntToStr(FreeMB)+ ' MB';

if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := false
else
WizardForm.NextButton.Enabled := true;
end;


//////////
procedure LogoOnClick(Sender: TObject);
var ReturnCode: Integer;
begin
ShellExec('open', 'http://rls.lan', '', '', SW_SHOWNORMAL, ewNoWait, ReturnCode)
end;
type
TProc=procedure(HandleW, msg, idEvent, TimeSys: LongWord);
var
ProgressBar : TNewProgressBar;
TimerID: LongWord;
pfunc: LongWord;
Label1:tlabel;

function WrapTimerProc(callback:TProc; paramcount:integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';
procedure Extract7z (hWnd: THandle; fpath,sourceDir:pchar); external 'Extract7z@files:is7z.dll stdcall';
function progress:integer; external 'progress@files:is7z.dll stdcall';
function progressmax:integer; external 'progressmax@files:is7z.dll stdcall';

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
progressbar.Max:=progressmax;
progressbar.Position:=progress;
end;


procedure InitializeWizard();
begin
////////////








//////////
begin

WizardForm.DiskSpaceLabel.Hide;
NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do

begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(198);
Width := ScaleX(209);
Height := ScaleY(13);



Caption := 'Требуется место на диске: 8,6 GB' ;
end;

begin
ProgressBar := TNewProgressBar.Create(WizardForm);
label1:=Tlabel.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
ProgressBar.Left := Left;
ProgressBar.Top := Top + ScaleX(20);
ProgressBar.Width := Width;
ProgressBar.Height := Height;
ProgressBar.Parent := WizardForm.InstallingPage;
ProgressBar.Position := 0;
label1.parent:=WizardForm.InstallingPage;
label1.top:=Top + ScaleX(45);
label1.left:=Left + ScaleY(10);
label1.caption:='Unpack data, Please wailt ...';
label1.left:=0;
label1.width:=235;
end;
end;
////////////IntToStr(NeedSize) + ' GB'
FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(216);
Width := ScaleX(209);
Height := ScaleY(13);
end;




WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;






/////////////////
ExtractTemporaryFile('Untitled-1.bmp');

LogoPanel := TPanel.Create(WizardForm);
with LogoPanel do
begin
Parent := WizardForm;
Left := ScaleX(8);
Top := ScaleY(327);
Width := ScaleX(156);
Height := ScaleY(23);
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}\Untitled-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;

procedure CurPageChanged(CurPageID: Integer);




begin
If CurPageID=wpFinished then KillTimer(0, TimerID);
if CurPageID = wpSelectDir then
if FreeMB < NeedSize then
begin
WizardForm.NextButton.Enabled:=False
end;
end;



procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssPostInstall then
begin
pfunc:=WrapTimerProc(@OnTimer, 4)
TimerID:=SetTimer(0, 0, 200, pfunc)
Extract7z (wizardform.handle, ExpandConstant('{src}') + '\data.xxx', ExpandConstant('{app}\Engine\'));
Extract7z (wizardform.handle, ExpandConstant('{src}') + '\videos.xxx', ExpandConstant('{app}\Engine\'));
Extract7z (wizardform.handle, ExpandConstant('{src}') + '\sounds.xxx', ExpandConstant('{app}\Engine\'));
end
end;
[/more]

Кто нибудь смотрел скрипт? Отпишитесь что там не так как надо
Автор: Yoldosh
Дата сообщения: 18.02.2009 17:17
Пожалуйста подскажите как сделать так чтобы картинка в левом углу с разрешением 164Х314 отображался на весь экран инсталлятора полностью или любая другая картинка с любым разрешением?!? заранее спасибо за помощ!
Автор: noiseless
Дата сообщения: 18.02.2009 18:18
Jetr0
Ну, если переписал установку на INNO, то давай скрипт в студию Проще будет разобраться.
Автор: kombat 77
Дата сообщения: 18.02.2009 18:36
Yoldosh

Цитата:
картинка в левом углу с разрешением 164Х314 отображался на весь экран инсталлятора полностью
[more=...]

procedure CurPageChanged(CurPageID: Integer);
begin
WizardForm.OuterNotebook.Height := ScaleY(313);
if CurPageID = wpWelcome then
begin
WizardForm.OuterNotebook.Height := WizardForm.Height;
WizardForm.WizardBitmapImage.Width := WizardForm.Width;
WizardForm.WizardBitmapImage.Height := WizardForm.Height;
WizardForm.NextButton.BringToFront;
WizardForm.CancelButton.BringToFront;
end;
end;

[/more]


Автор: Unc1e
Дата сообщения: 18.02.2009 19:22
Studio13_OutlaW,
Код: WizardForm.CancelButton.OnClick(WizardForm.CancelButton);
Автор: ChVL
Дата сообщения: 18.02.2009 19:43
В папку Program Files программа устанавливает две своих папки: \Program Files\MyProg1 и \Program Files\MyProg2. По этой причине в секции [Setup] приходится прописывать DefaultDirName={pf}.

1. При инсталляции возникает, естественно, окно "Папка Program Files существует" с вопросом: "Всё равно установить в эту папку?" - Как отключить это окно?

2. По умолчанию файлы unins000.dat и unins000.exe оказываются в папке Program Files. Как их прописать подальше, скажем, в папку \Program Files\MyProg1?
Автор: skeptik_vdm
Дата сообщения: 18.02.2009 19:48
У меня вот такой вопрос...можно ли сделать так чтобы при создании ключей в реестре не создавался суффикс _is1?
Находится это в HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\...

P.S.: я тут находил на предыдущих листах ответ на этот вопрос что в Setup.e32 что типа там покапаться но сколь я не смотрел ни чего похожего я не нашел!!!

Добавлено:
ChVL

1.[Setup]
DirExistsWarning=no
2.[Setup]
UninstallFilesDir={app}\MyProg1
или
UninstallFilesDir={pf}\MyProg1
Автор: Jetr0
Дата сообщения: 18.02.2009 20:28
noiseless
Ну вобщем-то не совсем переписал, точнее будет сказать по новой сделал. Да и там такой мега-скрипт, что фиг кто разберется Завтра выложу, когда на работе буду.
Автор: Studio13_OutlaW
Дата сообщения: 18.02.2009 20:47
Unc1e
Все равно не выкидывает....
Автор: Artem_Butenko
Дата сообщения: 18.02.2009 20:57
Ребята, кто-нибудь пытался повторить инсталлятор игры Анабиоз. Сон разума от 1C? Авторан и инсталлер написаны на Inno Setup, и представляют собой один исполнительный файл.

Добавлено:
Ребята, кто-нибудь пытался повторить инсталлятор игры Анабиоз. Сон разума от 1C? Авторан и инсталлер написаны на Inno Setup, и представляют собой один исполнительный файл.
Автор: Studio13_OutlaW
Дата сообщения: 18.02.2009 21:04
Artem_Butenko
Нет
Unc1e
Мне надо,наверно, что-то типа goto wpFinished
Автор: Region_70
Дата сообщения: 18.02.2009 22:18

Цитата:
картинка в левом углу с разрешением 164Х314 отображался на весь экран инсталлятора полностью

Ктото просил типа такого
Автор: Jetr0
Дата сообщения: 18.02.2009 23:48
Region_70
нет, скорее всего что-то типа такого:
Автор: Studio13_OutlaW
Дата сообщения: 19.02.2009 00:23
Я разницы не вижу...
Автор: Sig666
Дата сообщения: 19.02.2009 00:45
Ну, второй вариант гораздо симпатичнее
Автор: Region_70
Дата сообщения: 19.02.2009 06:56
Есть оба вида скрипта просто во второй добавлена кнопка и URLLabel на сколько я понял!
И не известно ли у меня там еще и меняться картинки так скажем! Как в этом скрипте?


Автор: Studio13_OutlaW
Дата сообщения: 19.02.2009 07:34

Цитата:
второй вариант гораздо симпатичнее

Наверно потому, что правильно подобранна цветовая гамма(светлый рисунок, цвет текста), также в нем используется библеотека ISSkin.dll.

Цитата:
URLLabel на сколько я понял

Правильно понял.

Автор: milwaukeeman
Дата сообщения: 19.02.2009 07:44
Да, мне тоже такой скрипт не помешает

Добавлено:
где взять русский язык

Inno Script Generator?
Автор: Studio13_OutlaW
Дата сообщения: 19.02.2009 09:19
milwaukeeman
В шапке уже есть такой скрипт...там ничего сложного нету
Немного тебя не понял....по поводу языка...

[Languages]
Name: Russian; MessagesFile: compiler:Languages\Russian.isl; LicenseFile: readme_game.txt; InfoBeforeFile: patch_RU.txt; InfoAfterFile: readme_repack.txt
Автор: de_MAX
Дата сообщения: 19.02.2009 09:22
Qarma
Это не совсем то. Для 7-zip'а есть длл-ка, а в репаках с ФТО используют freearc+precomp(где нужно)... вот именно на такой скрипт и хочется посмотреть. Но всё ровно спасибо)
Автор: Yoldosh
Дата сообщения: 19.02.2009 09:41

Цитата:
нет, скорее всего что-то типа такого:
Jetr0 А Где Взять Скрипт Полной Картинки
Автор: milwaukeeman
Дата сообщения: 19.02.2009 09:47

Цитата:
В шапке уже есть такой скрипт...там ничего сложного нету
Немного тебя не понял....по поводу языка...

[Languages]
Name: Russian; MessagesFile: compiler:Languages\Russian.isl; LicenseFile: readme_game.txt; InfoBeforeFile: patch_RU.txt; InfoAfterFile: readme_repack.txt


Я имею ввиду русскую версию программы
Автор: Qarma
Дата сообщения: 19.02.2009 09:48
Вот, тоже для 7z, но тут по другому сделал прогресс бар:


[more]
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
Compression=zip

[Languages]
Name: "rus"; MessagesFile: "compiler:Languages\Russian.isl"

[Files]
Source: c:\games\*; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: is7z.dll; DestDir: {tmp}; Flags: dontcopy
Source: InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy

[Icons]
Name: "{group}\Удалить"; IconFilename: "{app}\unins000.exe"; Filename: "{app}\unins000.exe"

[Code]
type
TProc=procedure(HandleW, msg, idEvent, TimeSys: LongWord);
var
ProgressBar : TNewProgressBar;
TimerID: LongWord;
pfunc: LongWord;
Label1:tlabel;

function WrapTimerProc(callback:TProc; paramcount:integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';
procedure Extract7z (hWnd: THandle; fpath,extractPath:pchar); external 'Extract7z@files:is7z.dll stdcall';
function progress:integer; external 'progress@files:is7z.dll stdcall';
function progressmax:integer; external 'progressmax@files:is7z.dll stdcall';

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
progressbar.Max:=progressmax;
progressbar.Position:=progress;
end;


procedure InitializeWizard();
begin
ProgressBar := TNewProgressBar.Create(WizardForm);
label1:=Tlabel.Create(WizardForm);
WizardForm.ProgressGauge.left:=135;
WizardForm.FilenameLabel.left:=135;
WizardForm.ProgressGauge.width:=280;
ProgressBar.Left := 10;
ProgressBar.Top := WizardForm.ProgressGauge.Top;
ProgressBar.Width := 120;
ProgressBar.Height := WizardForm.ProgressGauge.Height;
ProgressBar.Parent := WizardForm.InstallingPage;
ProgressBar.Position := 0;
label1.parent:=WizardForm.InstallingPage;
label1.top:=WizardForm.FilenameLabel.Top;
label1.caption:='Распаковка архива 7zip';
label1.left:=10;
label1.width:=130;
end;


procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssPostInstall then
begin
pfunc:=WrapTimerProc(@OnTimer, 4)
TimerID:=SetTimer(0, 0, 200, pfunc)
Extract7z (wizardform.handle, ExpandConstant('{src}') + '\anyfiles.7z', ExpandConstant('{app}'));
end
end;

procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpFinished then KillTimer(0, TimerID);
end;[/more]



Цитата:
ФТО используют freearc+precomp(где нужно)

Тогда я тоже хочу посмотреть такой скрипт))

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

Предыдущая тема: в очередной раз босудим антивиры?


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