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

Компьютерный форум 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

 

Аватара для Tco 03

Пользователь


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

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


Всем привет.
Johny777 пример очень даже http://forum.oszone.net/post-2259324-1482.html можно ли как-то прикрутить ко всей этой прелести, какие файлы копируются и полный путь копирования, и рамер в мегабайтах? А то я что-то долго уже этим не занимался и конкретно "отупел"
Ну и ещё, если конечно позволите, вопрос к знатокам. Как в инсталлятор портируется (если можно так сказать) электронная подпись? И как вписывается имя издателя?

Отправлено: 20:07, 30-11-2013 | #1571



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

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


Аватара для Johny777

Ветеран


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

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


Tco 03,
Цитата Tco 03:
можно ли как-то прикрутить ко всей этой прелести, какие файлы копируются и полный путь копирования, и рамер в мегабайтах »
О чём речь? Уже ж есть! Ты на прототип функции обратного вызова посмотри _FILE_CALLBACK:
Код: Выделить весь код
    _FILE_CALLBACK =
    function
    (
        const Msg: Integer; //сообщение статуса копирования
        const srcFilePath: String; //путь к текущему исходному файлу
        const dstFilePath: String; //путь к текущему файлу назначения
        const FileBytes: Extended; //размер текущего файла в байтах
        const FileBytesCopied: Extended; //сколько байт текущего файла скопировано
        const OverallBytes: Extended; //размер всех файлов в байтах
        const OverallBytesCopied: Extended //сколько байт всех файлов скопировано
    ): Boolean; //чтоб отменить копирование нужно вернуть False
только размер в байтах (так кстати и надо), которые уже не проблема математически перевести в нужную тебе единицу измерения памяти!
Цитата Tco 03:
Как в инсталлятор портируется (если можно так сказать) электронная подпись? »
хз
Цитата Tco 03:
И как вписывается имя издателя? »
справка --> директивы секции [Setup] --> VersionInfo*** директивы ?
=========================================================================
Raf-9600,
Цитата Raf-9600:
Т.е. мне нужно сделать чтобы кнопка "Стоп" (прерывающая воспроизведение) была активной только если что-то воспроизводиться. »
в начале функции
function PlayRandDemoSound(const Sounds: array of String): boolean;
напиши StopSoundBtn.Enabled := True;
в procedure InitializeWizard(); впиши StopSoundBtn.Enabled := False;
ну и в событии StopSoundBtn.OnClick закатай в конце
TButton(Sender).Enabled := False;

Последний раз редактировалось Johny777, 30-11-2013 в 23:42.

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

Отправлено: 23:11, 30-11-2013 | #1572


Аватара для Tco 03

Пользователь


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

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


Цитата Johny777:
О чём речь? Уже ж есть! Ты на прототип функции обратного вызова посмотри _FILE_CALLBACK: »
Я имею в виду реализовать вот такой вид. Чтобы, что, куда копируется было бы видно.



А если ещё к твоему примеру и проценты прикрутить, будет вообще класс!

Цитата Johny777:
только размер в байтах (так кстати и надо), которые уже не проблема математически перевести в нужную тебе единицу измерения памяти! »
Я всё понимаю, так правильно, но для человеческого глаза, согласись смотрится как-то не так.

Отправлено: 01:22, 01-12-2013 | #1573


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


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

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


Изображения
Тип файла: png 11111.PNG
(134.4 Kb, 12 просмотров)

Здравствуйте. Помогите мне. Что делать, у меня что-то плохо отображается дополнительные слова, которые я вписал.
http://forum.oszone.net/attachment.p...1&d=1385907108

Отправлено: 18:12, 01-12-2013 | #1574


Аватара для Johny777

Ветеран


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

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


Tco 03,
Цитата Tco 03:
Я имею в виду реализовать вот такой вид. Чтобы, что, куда копируется было бы видно. »
вот тебе ещё лучше:

код ( замени участок "demo" в этом примере http://forum.oszone.net/post-2259324-1482.html ):
читать дальше »
Код: Выделить весь код
////////////////////////////////////////////  demo //////////////////////////////////////////////////////////////////
function GetTickCount: DWORD; external 'GetTickCount@kernel32.dll stdcall';

const
    SPACE = #32;
    KILOBYTE = 1024;
    MEGABYTE = 1048576;
    GIGABYTE = 1073741824;
    //TERABYTE = 1099511627776;
function TicksToTime(const Ticks: Single): String;
var
    hCount, mCount, sCount: Integer;
    LocalTicks: Single;
begin
    Result := '';
    if Ticks = 0 then Exit;
    
    LocalTicks := Ticks/1000;
    hCount := Round(LocalTicks) div 3600;
    LocalTicks := LocalTicks-hCount*3600;
    mCount := Round(LocalTicks) div 60;
    sCount := Round(LocalTicks-mCount*60);

    if hCount <> 0 then Result := Result + IntToStr(hCount) + SPACE + 'Hours' + SPACE;
    if mCount <> 0 then Result := Result + IntToStr(mCount) + SPACE + 'Min' + SPACE;
    if sCount <> 0 then Result := Result + IntToStr(sCount) + SPACE + 'Sec';
end;
function ConvertSize(const Bytes: Extended): String;
begin
    if Bytes < KILOBYTE then
      Result := Format('%d b', [Bytes])
    else
    if Bytes < MEGABYTE then
      Result := Format('%.2f Kb', [Bytes/KILOBYTE])
     else
    //if Bytes < GIGABYTE then
      Result := Format('%.2f Mb', [Bytes/MEGABYTE]);
end;
function RemTime(
  const StartTime: Integer;
  const NowTime: Integer;
  const Count: Extended;
  const OverallCount: Extended
): Integer;
var
    TimePast: Integer;
    CountLeft: Extended;
begin
    Result := 0;
    if Count = 0 then Exit;

    TimePast := NowTime - StartTime;
    CountLeft := OverallCount - Count;

    Result := Round(( TimePast * CountLeft ) / Count);

//    Example:   OverallCount = 1000;
//               Count = 50;
//               TimePast = 3000[Ms]  (NowTime - StartTime);
//
//               50 [Count]   -   3000[Ms]
//               950[Count]   -   x   [Ms]
//
//    Result = ( 3000[Ms] * 950[Count] ) div 50[Count]
end;



const
    NEW_LINE = #13#10;
var
    MainCopyPrgBar,FileCopyPrgBar: TNewProgressBar;
    FileStatic: TNewStaticText;
    CopyStartTime: Integer;

    function ____________________
    (
        const Msg: Integer;
        const srcFilePath: String;
        const dstFilePath: String;
        const FileBytes: Extended;
        const FileBytesCopied: Extended;
        const OverallBytes: Extended;
        const OverallBytesCopied: Extended
    ): Boolean;
    var
        OverallPercent, FilePercent: Integer;
    begin
        case Msg of
            COPY_COLLECTING_INFO: FileStatic.Caption := 'Processing: ' + srcFilePath;
            COPY_IN_PROGRESS:
            begin
                if CopyStartTime = 0 then CopyStartTime := GetTickCount();

                OverallPercent := Round( (100*OverallBytesCopied) / OverallBytes );
                FilePercent := Round( (100*FileBytesCopied) / FileBytes );
                FileCopyPrgBar.Position := FilePercent;
                MainCopyPrgBar.Position := OverallPercent;
                
                FileStatic.Caption :=
                'Copying:'                                                       + NEW_LINE +
                'Source: '  + srcFilePath                                        + NEW_LINE +
                'Dest: '      + dstFilePath                                      + NEW_LINE +
                                                                                 + NEW_LINE +
                'Overall: '   +       ConvertSize( OverallBytesCopied ) + ' of ' +
                                      ConvertSize( OverallBytes       ) + ',   ' +
                                      IntToStr(    OverallPercent     ) + '[%]'  + NEW_LINE +

                'File: '      +       ConvertSize( FileBytesCopied )    + ' of ' +
                                      ConvertSize( FileBytes       )    + ',   ' +
                                      IntToStr(    FilePercent     )    + '[%]'  + NEW_LINE +
                                                                        + NEW_LINE +
                'Remaining Time: ' +  TicksToTime( RemTime(CopyStartTime, GetTickCount, OverallBytesCopied, OverallBytes) ) + NEW_LINE +
                'Elapsed Time: '   +  TicksToTime( GetTickCount() - CopyStartTime );
            end;          
            COPY_FINISHED: MsgBox('Finish! :)', mbInformation, MB_OK);
        end;
                                                                           
        Application.ProcessMessages;

        Result := not Application.Terminated;
    end;




procedure ButtonClick(Sender: TObject);
begin
    CopyFiles('D:\Freemans Mind\', 'C:\downloads',['*'], SET_PROCESS_READONLY_FILES or SET_OVERWRITE_EXISTING_FILES, @____________________);
end;

procedure InitializeWizard();
begin
    CopyStartTime := 0;
    
    WizardForm.OuterNotebook.Hide;
    
    MainCopyPrgBar := TNewProgressBar.Create(nil);
    with MainCopyPrgBar do
    begin
        Parent:= WizardForm;
        SetBounds(ScaleX(5), ScaleY(5), WizardForm.ClientWidth-10, ScaleY(20));
    end;
    
    FileCopyPrgBar := TNewProgressBar.Create(nil);
    with FileCopyPrgBar do
    begin
        Parent:= WizardForm;
        SetBounds(ScaleX(5), ScaleY(30), WizardForm.ClientWidth-10, ScaleY(20));
    end;
    
    FileStatic := TNewStaticText.Create(WizardForm);
    with FileStatic do
    begin
        Parent := WizardForm;
        SetBounds(ScaleX(5), ScaleY(65), WizardForm.ClientWidth-10, ScaleY(20));
        Caption := '...';
    end;

    with TButton.Create(WizardForm) do
    begin
        Parent:= WizardForm;
        Left := ScaleX(0);
        Top := ScaleY(200);
        Width := ScaleY(150);
        Caption:='Copy';
        OnClick:=@ButtonClick;
    end;
end;


PS: повторюсь. Та инфа которую, ты хочешь отобразить + то, что я дополнительно отображаю высчитывается в каллбэке (функции обратного вызова)
короче прочитай внимательно пример!
можно ещё прикрутить время (оставшееся, прошедшее) для текущего файла, но я не стал перегружать код, тк думаю, что это лишнее

=====================================================================================

sergey095,
используй функцию
Код: Выделить весь код
 function CustomMessage(const MsgName: String): String; // Returns the value of the [CustomMessages] entry with the specified name.
например: свойство класса(пр. Caption, Text) := CustomMessage('infopath01');

Последний раз редактировалось Johny777, 01-12-2013 в 18:30.


Отправлено: 18:16, 01-12-2013 | #1575


Аватара для Tco 03

Пользователь


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

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


Цитата Johny777:
вот тебе ещё лучше: »
Вот, это совсем другое дело Мне по большому счёту это не нужно, просто понравился код, а именно: отображение прогресс бара и прочая информация при копировании.
Хотя считывание размера и процентов каждого копирующегося файла, малых размеров, отображается мельканием строчки и конкретно там ничего не увидеть.
И ещё, если тебе интересно, вот такая ошибка, иногда имеет место быть:


Отправлено: 19:12, 01-12-2013 | #1576


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


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

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


Johny777, Спасибо. Все встало как надо.

Отправлено: 19:26, 01-12-2013 | #1577


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


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

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


Как сделать чтобы при удалении, удалялись только установленные файлы?

Последний раз редактировалось Dimon585h, 01-12-2013 в 20:07.


Отправлено: 19:42, 01-12-2013 | #1578


Аватара для Tco 03

Пользователь


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

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


Цитата Dimon585h:
Как сделать чтобы при удалении, удалялись только установленные файлы? »

По умолчанию (если не исползуются сторониие распаковщики) то есть, если запаковать проект только Inno, то после установки удаляются только те файлы, которые скопированы. Все установленные файлы прописываются в unins000.dat
Если ипользуются сторонние распаковщики, то нужно прописать что удалить:
читать дальше »

Пример:
[UninstallDelete]
Name: "{app}\Dair1"; Type: filesandordirs; Удалить папку с файлами
Name: "{app}\Dair2"; Type: dirifempty; Удалить папку только если она пустая
Name: "{app}\MyProgramm.exe"; Type: files; Удалить определённый файл
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:24, 01-12-2013 | #1579


Аватара для Raf-9600

Старожил


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

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


Цитата Johny777:
в начале функции
function PlayRandDemoSound(const Sounds: array of String): boolean;
напиши StopSoundBtn.Enabled := True;
в procedure InitializeWizard(); впиши StopSoundBtn.Enabled := False;
ну и в событии StopSoundBtn.OnClick закатай в конце
TButton(Sender).Enabled := False; »
Спасибо, но это не совсем то, в чём затык произошёл. Кроме этого функционала, нужно ещё чтобы после того как воспроизведение само завершиться (без клика пользователя по кнопке Стоп), кнопка Стоп становилась неактивной.

Отправлено: 00:08, 02-12-2013 | #1580



Компьютерный форум 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




 
Переход