Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 6]

Закрытая тема
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 6]

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1274
Благодарности: 1030


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: El Sanchez
Дата: 16-02-2015
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

Отправлено: 19:06, 28-03-2013

 

Ветеран


Сообщения: 517
Благодарности: 314

Профиль | Отправить PM | Цитировать


Цитата diman_21Ru:
Всем привет помогите пожалуйста с одним вопросом не как не могу сделать backup папки res-mods и вывести галочку в компоненты ниже в скрине указал »
Хватит плодить одинаковые посты. Двумя сообщениями выше только написали: прикрепляйте к сообщению скрипт(желательно с минимальным набором файлов), а не скриншот. Или вам чекбокс надо просто на скрине нарисовать?
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:07, 05-02-2014 | #2131



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 25
Благодарности: 1

Профиль | Отправить PM | Цитировать


вопрос насчёт backup, галочку не выводит
получается надо добавить это:
PHP код: Выделить весь код

Source: {app}res_mods*; DestDir: {app}res_mods_oldFlagsexternal overwritereadonly ignoreversion;    CheckIsBackup(const FromDirString; const ToDirString); 


но тогда ругается на const ToDir
если просто
PHP код: Выделить весь код

Source: {app}res_mods*; DestDir: {app}res_mods_oldFlagsexternal overwritereadonly ignoreversion;    CheckIsBackup(); 


то тогда пишет ошибку в коде

Invalid prototype for 'IsBackup'
procedure IsBackup(const FromDir: String; const ToDir: String);

Отправлено: 16:58, 05-02-2014 | #2132


Аватара для Ivan_009

Ветеран


Сообщения: 608
Благодарности: 58

Профиль | Цитировать


Почему неотображаютя кнопки вперед, назад, отмена...

Код:

Код: Выделить весь код
procedure InitializeWizard();
begin
with WizardForm do begin
ClientWidth:=ScaleX(600); 
ClientHeight:=ScaleY(400);
OuterNotebook.SetBounds(ScaleX(0),ScaleY(0),WizardForm.ClientWidth,WizardForm.ClientHeight);
InnerNotebook.SetBounds(ScaleX(0),ScaleY(0),WizardForm.ClientWidth,WizardForm.ClientHeight);
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
Bevel.Hide;
Center;
end;

with WizardForm.NextButton do begin
Left := ScaleX(380);
Top := ScaleY(365);
Width := ScaleX(90);
Height := ScaleY(23);
end;

with WizardForm.CancelButton do begin
Left := ScaleX(490);
Top := ScaleY(365);
Width := ScaleX(90);
Height := ScaleY(23);
end;

with WizardForm.BackButton do begin
Left := ScaleX(270);
Top := ScaleY(365);
Width := ScaleX(90);
Height := ScaleY(23);
end;

with WizardForm.DirBrowseButton do begin
Left := ScaleX(465);
Top := ScaleY(200);
Width := ScaleX(90);
Height := ScaleY(23);
end;

with WizardForm.GroupBrowseButton do begin
Left := ScaleX(465);
Top := ScaleY(200);
Width := ScaleX(90);
Height := ScaleY(23);
end;
end;

Отправлено: 17:18, 05-02-2014 | #2133


Ветеран


Сообщения: 517
Благодарности: 314

Профиль | Отправить PM | Цитировать


Цитата innot20:
получается надо добавить это:»
Пример, что я вам дал, самодостаточный, в него ничего добавлять не надо, только указать правильные имена папок, так как я их не знаю, ибо не играю в танки:
Код: Выделить весь код
#define CUR_DIR "res-mods" ;Папка, которую нужно бэкапить.
#define BAK_DIR "old_res-mods" ;Папка, в которую помещается бэкап
Цитата innot20:
Source: {app}res_mods*; DestDir: {app}res_mods_old; Flags: external overwritereadonly ignoreversion; Check: IsBackup(); »
Вы видели в моем примере чековую функцию? Нет. IsBackup(...) не результатирующая функция, а процедура, вызываемая на этапе перед установкой.
Цитата innot20:
галочку не выводит »
Чекбокс создается только в том случае, если в папке назначения есть папка, резервную копию которой нужно создать. Если этой папки нет, то бэкапить нечего, а следовательно и чекбокс не нужен.
----------------------------------------------------------------------------------------------------------------------------------

Цитата Ivan_009:
Почему неотображаютя кнопки вперед, назад, отмена... »
Потому что вы перекрыли их ноутбуками. Переместите кнопки на передний план.
Код: Выделить весь код
with WizardForm.CancelButton do begin
    BringToFront;
end;

Последний раз редактировалось saurn, 05-02-2014 в 18:14.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:04, 05-02-2014 | #2134


SHVtYW4=


Сообщения: 3451
Благодарности: 1273

Профиль | Отправить PM | Цитировать


Цитата diman_21Ru:
ниже в скрине указал »
Вот так. Ну как, всё понял как делать?

diman_21Ru, Собственно как и обещал.

-------
09a468a9b4293cd82adf6d6c60a9da82 | Tm9yZGVr
В связи со сменой железа и переходом на LInux с полным отказом от Windows - посещение на форуме будет редким.


Отправлено: 18:34, 05-02-2014 | #2135


Аватара для diman_21Ru

Старожил


Сообщения: 217
Благодарности: 4

Профиль | Отправить PM | Цитировать


Nordek , да мне так надо , можешь скинуть код ? зарание спасибо

Отправлено: 18:35, 05-02-2014 | #2136


SHVtYW4=


Сообщения: 3451
Благодарности: 1273

Профиль | Отправить PM | Цитировать


Цитата diman_21Ru:
да мне так надо , можешь скинуть код ? »
Я тебе уже ответ дал, точно так же как и ты нам.

Хорошо, подчеркну:
Цитата Nordek:
Да, здесь ещё есть и особенные типажи, которые любят поскринить - скриншот с ошибкой и больше ничего.
Код тоже между прочим необходимо к скриншоту прилагать. »
Я всё понимаю что вам новичкам не хочется свой код показывать всему интернету - дабы чтобы никто не повторил и не использовал этот код кроме вас.
Знаете ли вы, то что вы спрашиваете здесь - здесь и остаётся. Все ответы которые вам предоставили - можно собрать и сделать уникальный скрипт без ошибок, а не как вы с кучей камней и дублями на тысячу строк. Затем готовый скрипт который будет лучше вашего как минимум в те же тысячу раз - выложить в интернет (поделиться со всем миром)
Чтоб никто не украл, нужно самим всё делать. Чтоб никто не повторил, нужно быть элитным кодером (которые здесь действительно есть) а не горе-репакером.

-------
09a468a9b4293cd82adf6d6c60a9da82 | Tm9yZGVr
В связи со сменой железа и переходом на LInux с полным отказом от Windows - посещение на форуме будет редким.


Последний раз редактировалось Nordek, 05-02-2014 в 19:16.


Отправлено: 18:45, 05-02-2014 | #2137


Аватара для Ivan_009

Ветеран


Сообщения: 608
Благодарности: 58

Профиль | Цитировать


saurn, А если я буду накладывать лэйблы и бэвелы мне все время надо указывать BringToFront; или нет...

Отправлено: 19:54, 05-02-2014 | #2138


Ветеран


Сообщения: 517
Благодарности: 314

Профиль | Отправить PM | Цитировать


Цитата Ivan_009:
А если я буду накладывать лэйблы и бэвелы мне все время надо указывать BringToFront; или нет... »
С бевелами ситуация иная, на них BringToFront здесь не работает. Но вы же будете создавать их на конкретных страницах, так что этот параметр и не нужен.
А чтоб не плодить BringToFront, достаточно поместить ноутбуки на задний план:
Код: Выделить весь код
procedure InitializeWizard();
begin
    with WizardForm do
    begin
        OuterNotebook.SendToBack;
        InnerNotebook.SendToBack;
    end;
end;

Последний раз редактировалось saurn, 05-02-2014 в 20:25.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:18, 05-02-2014 | #2139


Ветеран


Сообщения: 517
Благодарности: 314

Профиль | Отправить PM | Цитировать


Цитата Ivan_009:
Как прописать только сколько Требуется места для установки и Занимаемое место после установки.
Зарание спасибо... (Если можно дайте пожалуйста пример) »
читать дальше »

Выдернул из скрипта. Думаю разберетесь)
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
OutputDir=...
DisableWelcomePage=yes


[Files]
Source: C:\Windows\Fonts\*; DestDir: {app}; Flags: external overwritereadonly ignoreversion; ExternalSize: 50000000000;


[CustomMessages]
MESSAGE_23=Требуется места на диске:
MESSAGE_24=Доступно места на диске:
MESSAGE_25=Файловая система:
MESSAGE_26=МБ
MESSAGE_27=ГБ
MESSAGE_28=ТБ


[Code]
#define A = (Defined UNICODE) ? "W" : "A"


const
    MAX_PATH                 = 260;
    TARGET_FILE_SYSTEM       = 'NTFS';


function GetVolumeInformation(lpRootPathName, lpVolumeNameBuffer: String; nVolumeNameSize, lpVolumeSerialNumber: DWORD;
  var lpMaximumComponentLength, lpFileSystemFlags: DWORD; lpFileSystemNameBuffer: String; nFileSystemNameSize: DWORD): BOOL;
    external 'GetVolumeInformation{#A}@kernel32.dll stdcall';


var
    MinorInfoLabels, MainInfoLabels: array of TNewStaticText;
    


function GetFreeDriveSpace(const UndefInstallPath: String): Cardinal;
var
    TotalMB: Cardinal;
begin
    GetSpaceOnDisk(ExtractFileDrive(UndefInstallPath), True, Result, TotalMB);
end;


function GetFloatFromText(const UndefText: String): String;
var
    i, Len: Integer;
begin
    Len := Length(UndefText);

    for i := 1 to Len do
    case UndefText[i] of
        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': Result := Result + UndefText[i];
        ',': Result := Result + '.';
    end;
end;


function NumToStr(const Float: Extended): String;
var
    Len: Integer;
begin
    Result := Format('%.2n', [Float]);
    StringChange(Result, ',', '.');
    Len := Length(Result);

    while ((Result[Len] = '0') or (Result[Len] = '.')) and (Pos('.', Result) > 0) do
        begin
            Delete(Result, Len, 1);
            Len := Length(Result);
        end;
end;


function UnitDriveSpace(const Float: Extended): String;
begin
    if (Float < 1024) then Result := NumToStr(Float) + #32 + CustomMessage('MESSAGE_26')
    else if (Float/1024 < 1024) then Result := NumToStr(Float/1024) + #32 + CustomMessage('MESSAGE_27')
    else Result := NumToStr(Float/(1024*1024)) + #32 + CustomMessage('MESSAGE_28');
end;


function CompareDriveRequirements(const FromText: String; const Input: String): Boolean;
var
    Len: Integer;
    CompareSpace, CompareFileSystem: Boolean;
    UndefNeedSize, UndefFreeSize: Extended;
    VolumeName, FileSystemName, DriveLetter: String;
    ComponentLength, SerialNumber, FileSystemFlags: DWORD;
begin
    Len := GetArrayLength(MainInfoLabels) - 1;

    UndefNeedSize := StrToFloat(GetFloatFromText(FromText));
    UndefFreeSize := Extended(GetFreeDriveSpace(Input));
    VolumeName := StringOfChar(#32, MAX_PATH);
    FileSystemName := StringOfChar(#32, MAX_PATH);
    DriveLetter := AddBackslash(ExtractFileDrive(Input));

    GetVolumeInformation(DriveLetter, VolumeName, MAX_PATH, SerialNumber, ComponentLength, FileSystemFlags, FileSystemName, MAX_PATH);

    MainInfoLabels[0].Caption := UnitDriveSpace(UndefNeedSize);
    MainInfoLabels[1].Caption := UnitDriveSpace(UndefFreeSize);
    MainInfoLabels[Len].Caption := Trim(FileSystemName);

    CompareSpace := (UndefFreeSize > UndefNeedSize);

    case CompareSpace of
        True: MainInfoLabels[1].Font.Color := clBlack;
        False: MainInfoLabels[1].Font.Color := clRed;
    end;

    CompareFileSystem := (Trim(FileSystemName) >= TARGET_FILE_SYSTEM);

    case CompareFileSystem of
        True: MainInfoLabels[Len].Font.Color := clBlack;
        False: MainInfoLabels[Len].Font.Color := clRed;
    end;

    Result := (CompareSpace and CompareFileSystem);
    WizardForm.NextButton.Enabled := Result;
end;


procedure WizardEditsOnChange(Sender: TObject);
begin
    case TEdit(Sender) of
        WizardForm.DirEdit: CompareDriveRequirements(WizardForm.DiskSpaceLabel.Caption, WizardDirValue());
    end;
end;


procedure CreateCustomControls();
var
    i, Len: Integer;
    InfoBox: TNewGroupBox;
begin
    with WizardForm do
    begin
        InfoBox := TNewGroupBox.Create(SelectDirPage);
        with InfoBox do
        begin
            Parent := SelectDirPage;
            SetBounds(ScaleX(12), ScaleY(120), ScaleX(450), ScaleY(86));

            SetArrayLength(MinorInfoLabels, 3);
            Len := GetArrayLength(MinorInfoLabels) - 1;

            for i := 0 to Len do
            begin
                MinorInfoLabels[i] := TNewStaticText.Create(InfoBox);
                with MinorInfoLabels[i] do
                begin
                    Parent := InfoBox;
                    SetBounds(ScaleX(16), ScaleY(13 + i*23), ScaleX(138), ScaleY(14));
                    AutoSize := False;

                    case i of
                        0: Caption := CustomMessage('MESSAGE_23');
                        1: Caption := CustomMessage('MESSAGE_24');
                        Len: Caption := CustomMessage('MESSAGE_25');
                    end;
                end;
            end;

            SetArrayLength(MainInfoLabels, 3);
            Len := GetArrayLength(MainInfoLabels) - 1;

            for i := 0 to Len do
            begin
                MainInfoLabels[i] := TNewStaticText.Create(InfoBox);
                with MainInfoLabels[i] do
                begin
                    Parent := InfoBox;
                    SetBounds(ScaleX(165), ScaleY(13 + i*23), ScaleX(268), ScaleY(14));
                    AutoSize := False;
                end;
            end;
        end;
    end;
end;


procedure ModifyWizardForm();
begin
    with WizardForm do
    begin
        ClientWidth := ScaleX(498);
        ClientHeight := ScaleY(354);
        BorderStyle := bsDialog;
        Position := poScreenCenter;

        OuterNotebook.SetBounds(ScaleX(0), ScaleY(0), ScaleX(498), ScaleY(302));
        InnerNotebook.SetBounds(ScaleX(12), ScaleY(62), ScaleX(474), ScaleY(238));
        MainPanel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(498), ScaleY(60));
        Bevel1.SetBounds(ScaleX(0), ScaleY(60), ScaleX(498), ScaleY(3));
        BeveledLabel.Top := ScaleY(294);
        BackButton.SetBounds(ScaleX(252), ScaleY(318), ScaleX(75), ScaleY(23));
        NextButton.SetBounds(ScaleX(327), ScaleY(318), ScaleX(75), ScaleY(23));
        CancelButton.SetBounds(ScaleX(412), ScaleY(318), ScaleX(75), ScaleY(23));
        PageNameLabel.SetBounds(ScaleX(16), ScaleY(10), ScaleX(324), ScaleY(14));
        PageDescriptionLabel.SetBounds(ScaleX(24), ScaleY(26), ScaleX(316), ScaleY(28));
        SelectDirLabel.SetBounds(ScaleX(68), ScaleY(9), ScaleX(262), ScaleY(14));
        SelectDirBitmapImage.Left := ScaleX(12);
        SelectDirBrowseLabel.Left := ScaleX(12);

        with DirEdit do
        begin
            Left := ScaleX(12);
            Width := ScaleX(370);
            OnChange := @WizardEditsOnChange;
        end;
        
        DirBrowseButton.Left := ScaleX(387);
        DiskSpaceLabel.Hide;
    end;
end;


procedure InitializeWizard();
begin
    ModifyWizardForm();
    CreateCustomControls();
end;


procedure CurPageChanged(CurPageID: Integer);
begin
    case CurPageID of
        wpSelectDir: WizardEditsOnChange(WizardForm.DirEdit);
    end;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:08, 05-02-2014 | #2140



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 6]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 5] El Sanchez Автоматическая установка приложений 1999 28-03-2013 19:09
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59




 
Переход