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

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

Автор: exotic33
Дата сообщения: 15.12.2014 17:33
Как пользоваться скриптами, что выкладывают здесь? Подскажите пожалуйста, мне необходимо создать неплохой установщик за короткие сроки, а в этой тематике я лишь несколько часов копаюсь. Pascal вроде знаю. Пытаюсь компилировать выбивает ошибку, и чтобы её исправить в теме посоветовали установить китайскую версию. Открыл её и упал в обморок, что там делать? Как запустить? Расскажите пожалуйста, не кидайте камнями.

Добавлено:
Сам разобрался. Вот так всегда...
Автор: AtotIK
Дата сообщения: 21.12.2014 00:47
Есть ли возможность получить программно модуль числа или придётся извращаться при помощи IntToStr, StringChangeEx и StrToInt?
Автор: htuos
Дата сообщения: 25.12.2014 11:54

Цитата:
Есть ли возможность получить программно модуль числа или придётся извращаться при помощи IntToStr, StringChangeEx и StrToInt?

со строками это бред. на худой конец можно так

function Abs(x: integer): integer;
begin
Result := x;
if Result < 0 then Result := Result * -1;
end;

function Abs(x: integer): integer;
begin
Result := x;
if Result < 0 then Result := not Result + 1;
end;
Автор: MrLOLs
Дата сообщения: 27.12.2014 01:25
Помогите пожалуйста разобраться с OnlyBelowVersion, MinVersion.

Мне нужно обработать вхождение только для Win8, Win 8.1, то есть так:
Windows 7 (6.1) - не обрабатывается
Windows 8 (6.2) - обрабатывается
Windows 8.1 (6.3) - обрабатывается
Windows 10 (6.4) - не обрабатывается

Я указываю OnlyBelowVersion: 6.4; MinVersion: 6.2
При этом получается так:
Windows 7 (6.1) - не обрабатывается
Windows 8 (6.2) - обрабатывается
Windows 8.1 (6.3) - обрабатывается
Windows 10 (6.4) - обрабатывается

Как убрать Windows 10 из обработки, если при OnlyBelowVersion: 6.3; MinVersion: 6.2 получается так:
Windows 7 (6.1) - не обрабатывается
Windows 8 (6.2) - обрабатывается
Windows 8.1 (6.3) - не обрабатывается
Windows 10 (6.4) - не обрабатывается
Автор: Avengerz13
Дата сообщения: 27.12.2014 22:31
MrLOLs
Попробуйте вот так.

Цитата:
OnlyBelowVersion: 6.3.9600; MinVersion: 6.2.9200

Если не получается тогда используй функцию GetWindowsVersionEx

Код: function InitializeSetup: Boolean;
var
Version: TWindowsVersion;
S: String;
begin
GetWindowsVersionEx(Version);

// Disallow installation on Home edition of Windows
if Version.SuiteMask and VER_SUITE_PERSONAL <> 0 then
begin
SuppressibleMsgBox('This program cannot be installed on a Home edition of Windows.',
mbCriticalError, MB_OK, MB_OK);
Result := False;
Exit;
end;

// Disallow installation on domain controllers
if Version.ProductType = VER_NT_DOMAIN_CONTROLLER then
begin
SuppressibleMsgBox('This program cannot be installed on domain controllers.',
mbCriticalError, MB_OK, MB_OK);
Result := False;
Exit;
end;

// On Windows 2000, check for SP4
if Version.NTPlatform and
(Version.Major = 5) and
(Version.Minor = 0) and
(Version.ServicePackMajor < 4) then
begin
SuppressibleMsgBox('When running on Windows 2000, Service Pack 4 is required.',
mbCriticalError, MB_OK, MB_OK);
Result := False;
Exit;
end;

// On Windows XP, check for SP2
if Version.NTPlatform and
(Version.Major = 5) and
(Version.Minor = 1) and
(Version.ServicePackMajor < 2) then
begin
SuppressibleMsgBox('When running on Windows XP, Service Pack 2 is required.',
mbCriticalError, MB_OK, MB_OK);
Result := False;
Exit;
end;

Result := True;
end;
Автор: RussaKKinG
Дата сообщения: 29.12.2014 18:33
Подскажите как активировать страницу лицензии? и залить туда файл лицензия?
Автор: CUTA
Дата сообщения: 29.12.2014 18:49
Кто скажет, можно ли изменить размер окна, не стандартное а больше например 800 на 600?
Автор: Robby
Дата сообщения: 29.12.2014 19:21
RussaKKinG


Цитата:
Подскажите как активировать страницу лицензии? и залить туда файл лицензия?



Код:
[Setup]
LicenseFile=license.txt
Автор: dodakaedr
Дата сообщения: 29.12.2014 19:35
CUTA
Просто изменить размер инсталлятора не достаточно, так как придется изменять размеры всех остальных элементов установщика, но если только растянуть то...

Код: [Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Code]
procedure InitializeWizard();
begin
with WizardForm do
begin
Width := ScaleY(800);
Height := ScaleX(600);
end;
end;
Автор: CUTA
Дата сообщения: 29.12.2014 19:52
dodakaedr

Цитата:
Просто изменить размер инсталлятора не достаточно, так как придется изменять размеры всех остальных элементов установщика

Тоесть если я вас правильно понял то нужно растягивать все страницы и перемещать кнопки что ли?
Автор: dodakaedr
Дата сообщения: 29.12.2014 21:15

Цитата:
если я вас правильно понял то нужно растягивать все страницы и перемещать кнопки что ли?

Почти... страницы вы растяните через wizardform(в предыдущем моем посте), а кнопки, OuterNotebook, InnerNotebook, MainPanel и другие элементы тоже надо будет подгонять под размер установщика
[more=Пример]
Код: [Setup]
AppName=test2
AppVerName=test2
DefaultDirName={pf}\test

[Code]
procedure InitializeWizard;
begin
with WizardForm do
begin
ClientWidth := ScaleX( 598 );
ClientHeight := ScaleY( 355 );

OuterNotebook.SetBounds( ScaleX( 0 ), ScaleY( 0 ), ScaleX( ClientWidth ), ScaleY( 302 ) );
InnerNotebook.SetBounds( ScaleX( 12 ), ScaleY( 62 ), ScaleX( 574 ), ScaleY( 238 ) );
Bevel1.SetBounds( ScaleX( 0 ), ScaleY( 60 ), ScaleX( ClientWidth ), ScaleY( 3 ) );
Bevel.SetBounds( ScaleX( 0 ), ScaleY( 302 ), ScaleX( ClientWidth ), ScaleY( 2 ) );
BeveledLabel.Top := ScaleY( 294 );
BackButton.SetBounds( ScaleX( 352 ), ScaleY( 318 ), ScaleX( 75 ), ScaleY( 23 ) );
NextButton.SetBounds( ScaleX( 432 ), ScaleY( 318 ), ScaleX( 75 ), ScaleY( 23 ) );
CancelButton.SetBounds( ScaleX( 512 ), ScaleY( 318 ), ScaleX( 75 ), ScaleY( 23 ) );
MainPanel.Width := ScaleX( ClientWidth );
WizardSmallBitmapImage.Left := ScaleX( ClientWidth - 58 )
end;
end;
Автор: CUTA
Дата сообщения: 31.12.2014 11:05
dodakaedr
Ещё один тупой вопрос. Как сделать окно инсталлятора по центру при открытии? После изменения размера смещение в право и вниз.
Автор: dodakaedr
Дата сообщения: 31.12.2014 18:28
CUTA

Код: WizardForm.Position:=poDesktopCenter;
Автор: CUTA
Дата сообщения: 31.12.2014 19:10
dodakaedr
Большущее спасибо и с наступающим Новым Годом!
Пожалуйста подскажи, как растянуть картинку на странице завершения.
Вот секция код:
Код:
[Code]

procedure InitProgressBar(hwnd:thandle; l,t,w,h,speed:integer; clFore, clBack: integer); external 'InitProgressBar@files:IsProgressBar.dll stdcall';
procedure DeinitProgressBar; external 'DeinitProgressBar@files:IsProgressBar.dll stdcall';

procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageId = wpInstalling then
begin
Wizardform.StatusLabel.Font.Size:=10; Wizardform.StatusLabel.Font.Style:= [fsBold];
Wizardform.Cancelbutton.Hide;
InitProgressBar(WizardForm.Handle, 90, 200, 418, 40, 100, clgreen, clwhite)
end;
If CurPageId = wpFinished then
begin
DeinitProgressBar;
end;
end;

procedure InitializeWizard();
begin
with WizardForm do
    begin
     Position := poDesktopCenter;
ClientWidth := ScaleX( 600 );
ClientHeight := ScaleY ( 480 );

        WelcomeLabel1.SetBounds( ScaleX( 0 ), ScaleY( 0 ), ScaleX( 0 ), ScaleY( 0 ) );
        WelcomeLabel2.SetBounds( ScaleX( 0 ), ScaleY( 0 ), ScaleX( 0 ), ScaleY( 0 ) );
        WizardBitmapImage.SetBounds( ScaleX( 0 ), ScaleY( 0 ), ScaleX( 600 ), ScaleY( 450 ) );
OuterNotebook.SetBounds( ScaleX( 0 ), ScaleY( 0 ), ScaleX( ClientWidth ), ScaleY( 440 ) );
InnerNotebook.SetBounds( ScaleX( 12 ), ScaleY( 63 ), ScaleX( 600 ), ScaleY( 370 ) );
        TasksList.SetBounds( ScaleX( 15 ), ScaleY( 15 ), ScaleX( 555 ), ScaleY( 355 ) );
        SelectTasksLabel.SetBounds( ScaleX( 0 ), ScaleY( 0 ), ScaleX( 0 ), ScaleY( 100 ) );
        ReadyLabel.SetBounds( ScaleX( 0 ), ScaleY( 0 ), ScaleX( 0 ), ScaleY( 0 ) );
        ReadyMemo.SetBounds( ScaleX( 15 ), ScaleY( 15 ), ScaleX( 555 ), ScaleY( 355 ) );
Bevel1.SetBounds( ScaleX( 0 ), ScaleY( 60 ), ScaleX( ClientWidth ), ScaleY( 3 ) );
Bevel.SetBounds( ScaleX( 0 ), ScaleY( 440 ), ScaleX( ClientWidth ), ScaleY( 2 ) );
BeveledLabel.Top := ScaleY( 294 );
        StatusLabel.SetBounds( ScaleX( 85 ), ScaleY( 100 ), ScaleX( 360 ), ScaleY( 20 ) );
        ProgressGauge.SetBounds( ScaleX( 0 ), ScaleY( 0 ), ScaleX( 0 ), ScaleY( 0 ) );
BackButton.SetBounds( ScaleX( 352 ), ScaleY( 450 ), ScaleX( 75 ), ScaleY( 23 ) );
NextButton.SetBounds( ScaleX( 432 ), ScaleY( 450 ), ScaleX( 75 ), ScaleY( 23 ) );
CancelButton.SetBounds( ScaleX( 512 ), ScaleY( 450 ), ScaleX( 75 ), ScaleY( 23 ) );
MainPanel.Width := ScaleX( ClientWidth );
WizardSmallBitmapImage.Left := ScaleX( ClientWidth - 58 )
end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=False
Cancel:=True
end;
Автор: dodakaedr
Дата сообщения: 31.12.2014 22:47

Цитата:
как растянуть картинку на странице завершения.

элемент WizardBitmapImage2
Код: WizardForm.WizardBitmapImage2.Width:=ScaleX(235);
Автор: Igimon
Дата сообщения: 01.01.2015 23:08
В имеющемся скрипте очень много функций procedure, все работает как надо.

дописал еще одну функцию

procedure AboutSetupClick;
begin
//здесь обрабатываем нажатие на пункт меню "О программе ..."
end;

оказалось не работает. Как заставить данную функцию работать что нужно дописать или переписать?
Автор: CUTA
Дата сообщения: 02.01.2015 18:20
Возможно ли сделать так что бы при наведении на CheckBox созданный стандартным способом в секции [Tasks], появлялось описание задачи в виде небольшого окна, например как в WPI?
Автор: BUU
Дата сообщения: 02.01.2015 20:18
Всем привет, есть такой вопрос

А можно так сделать, если выбрал компонент активировалась ручная страница после выбора компонента?

Чтоб эта еще страница не включалась до компонентов. Спс заранее
Ниже приложил страницу саму

[more]
AkkPage := CreateCustomPage(wpWelcome, ExpandConstant('{cm:akkpg0}'), ExpandConstant('{cm:akkpg1}'));

for i := 0 to 1 do
begin
with TLabel.Create(WizardForm) do
begin
Parent := AkkPage.Surface;
Alignment := taCenter;
AutoSize := False;
case i of
0 : Caption := ExpandConstant('{cm:login0}');
1 : Caption := ExpandConstant('{cm:passw0}');
end;
SetBounds(ScaleX(30), ScaleY(56+i*80), ScaleX(357), ScaleY(13));
end;

LPEdit[i] := TNewEdit.Create(WizardForm);
with LPEdit[i] do
begin
Font.Color:= clBlack;
OnChange := @Istext;
Parent := AkkPage.Surface;
SetBounds(ScaleX(30), ScaleY(72+i*80), ScaleX(357), ScaleY(21));
end;
end;
SiteLabel:=TLabel.Create(WizardForm)
SiteLabel.Cursor:=crHand;
SiteLabel.Font.Color:=clWhite;
SiteLabel.Font.Name:='Georgia';
SiteLabel.Caption:= ExpandConstant('{cm:regsher}');
SiteLabel.Font.Style:=[fsUnderline];
SiteLabel.OnClick:=@SiteLabelClick;
SiteLabel.OnMouseLeave:=@SiteLabelLeave;
SiteLabel.OnMouseEnter:=@SiteLabelEnter;
SiteLabel.Autosize:= True;
SiteLabel.Parent:= AkkPage.Surface;
SiteLabel.Alignment:= taCenter;
SiteLabel.Align:= alTop;
SiteLabel.Visible:= True;
end;[/more]
Автор: dodakaedr
Дата сообщения: 02.01.2015 22:57
BUU

Код: [Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Types]
Name: full; Description: полная установка; Flags: iscustom

[Components]
Name: "main"; Description: "Показать кастомную страничку";

[Code]
var
AkkPage: TWizardPage;

procedure InitializeWizard();
begin
AkkPage := CreateCustomPage(wpSelectTasks, 'ISCustomPage1_Caption', 'ISCustomPage1_Description');
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = AkkPage.id) then Result := not IsComponentSelected('main');
end;
Автор: BUU
Дата сообщения: 03.01.2015 00:07
dodakaedr
Код помог, но страница уже есть у меня и прописана после приветствия, если задать этот код, то сразу переходит к этой странице, но никак после выбора компонента

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = wpWelcome) then Result := not IsComponentSelected('Mode/SPOnly');
end;
Автор: dodakaedr
Дата сообщения: 03.01.2015 00:11
BUU

Цитата:
if (PageID = wpWelcome) then Result := not IsComponentSelected('Mode/SPOnly');



Код: function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = AkkPage.id) then Result := not IsComponentSelected('Mode/SPOnly');
end;
Автор: BUU
Дата сообщения: 03.01.2015 00:35
dodakaedr
А если у меня несколько компонентов отвечают за страницу, как указать несколько чтоб он считал их?

Скрипт выше не помог, страница не показывается, я выбрал один компонент и он должен показать ту страницу что есть у меня
Автор: dodakaedr
Дата сообщения: 03.01.2015 01:18
CUTA

Цитата:
Возможно ли сделать так что бы при наведении на CheckBox созданный стандартным способом в секции [Tasks], появлялось описание задачи в виде небольшого окна, например как в WPI?

пример от saurn
[more]
Код: [Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application


[Tasks]
Name: desktopicon; Description: "Create a &desktop icon"; GroupDescription: "Additional icons:";
Name: associate; Description: "Associate files"; GroupDescription: "Additional icons:"; Flags: unchecked


[Code]
{ Sets the mouse capture to the specified window belonging to the current thread }
function SetCapture( hWnd: HWND ): HWND; external 'SetCapture@user32.dll stdcall';


var { Global variables }
szDesc: TNewStaticText;


procedure RedesignWizardForm;
begin
{ Init global variable szDesc }
szDesc := TNewStaticText.Create( nil );
with szDesc do
begin
Parent := WizardForm.SelectTasksPage;
SetBounds( ScaleX( 0 ), ScaleY( 184 ), ScaleX( 417 ), ScaleY( 45 ) );
AutoSize := False;
WordWrap := True;
end;
end;



procedure ItemMouseMove( Sender: TObject; X, Y: Integer; Index: Integer; Area: TItemArea );
begin
if ( Index = - 1 ) then { If current index - 1, then }
begin
szDesc.Caption := ''; { Set caption on mouse leave }
SetCapture( 0 ); { Set handle on 0 }
Exit; { Exit from procedure }
end;

case TNewCheckListBox( Sender ).ItemCaption[Index] of { Treatment tasklist }
'Create a &desktop icon': szDesc.Caption := 'Создает ярлык программы на рабочем столе'; { Get item index of item caption }
'Associate files': szDesc.Caption := 'Ассоциирует поддерживаемые форматы с программой';
end;

SetCapture( TNewCheckListBox( Sender ).Handle ); { Set handle on tasklist }
end;


procedure InitializeWizard();
begin
RedesignWizardForm;
WizardForm.TasksList.OnItemMouseMove := @ItemMouseMove; { Call ItemMouseMove procedure }
end;
Автор: BUU
Дата сообщения: 03.01.2015 01:35
dodakaedr
Скрипт выше не помог, страница не показывается, я выбрал один компонент и он должен показать ту страницу что есть у меня, просто идет пропуск страницы и все, в чем причина?
Автор: dodakaedr
Дата сообщения: 03.01.2015 08:36
BUU
Скиньте свой скрипт
Автор: CUTA
Дата сообщения: 03.01.2015 08:45
dodakaedr

Цитата:
пример от saurn

Скрипт не компилируется, ошибка. Что не так в скрипте?

Автор: dodakaedr
Дата сообщения: 03.01.2015 09:13
CUTA
Какую ошибку, какая у вас версия inno?
Автор: CUTA
Дата сообщения: 03.01.2015 09:19
dodakaedr

Цитата:
Какую ошибку, какая у вас версия inno?

Версия Inno setup с оф. сайта 5.5.5 unicode

Вот ошибка
Автор: ultimo
Дата сообщения: 03.01.2015 09:58
Всем привет)

Хочу разукрасить InnerNotebook с помощью функции ImgLoad (botva2)


Код:
ImgLoad(InnerNotebook.Handle, 'WizardImage.jpg', ScaleX(0), ScaleY(0), WizardForm.ClientWidth, WizardForm.ClientHeight, True, True);

ImgApplyChanges(InnerNotebook.Handle);
Автор: dodakaedr
Дата сообщения: 03.01.2015 12:33
CUTA

Цитата:
Вот ошибка

Советую использовать расширенную версию. На стандартной такое не сделать, насколько знаю.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758

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


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