Имя пользователя:
Пароль:
 | Правила  

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

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

Аватара для 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] - Скачать;


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:
Inno Setup [все вопросы] часть 1
Inno Setup [все вопросы] часть 2
Скрипты Inno Setup. Помощь и советы [часть 3]
Скрипты Inno Setup. Помощь и советы [часть 4]

Отправлено: 03:49, 21-05-2012

 

Ветеран


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

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


как в isdone сделать разбивку на тома?

Отправлено: 21:36, 31-10-2012 | #1191



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

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


Аватара для Gnom_aka_Lexander

Ветеран


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

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


insombia, как человек вроде-бы уже опытный, мог-бы и знать, что библиотека isdone не предназначена ни для сжатия, ни для разбития на тома. Она используется исключительно для распаковки архивов, упакованных внешними архиваторами, не более. И там есть функция, которая выводит диалог запроса следующего диска, если ты об этом. Один из параметров этой функции - любой файл, который должен лежать на запрошеном диске, и если этот файл уже есть в наличии, то соответственно, запроса следующего диска не будет, ввиду отсутствия таковой необходимости.
Хотя, чего сильно распинаться? Вместе с этой библиотекой распространяется справка, в которой все ее функции удивительно подробно и понятно расписаны.

-------
Я люблю помогать. Но не путайте: "Помогите мне" и "Сделайте за меня" - это совершенно разные понятия.

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

Отправлено: 15:36, 01-11-2012 | #1192


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

Ветеран


Contributor


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

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


Цитата Johny777:
с тех пор как добавил "Отмену" (еще до внесения мной изменений) часто вылетает ошибка без выделения строки в дебаггере "Out Of Range" »
Johny777, ты уверен, что массив FileList существует и в нем есть хотя бы 1 элемент?
Так нельзя:
Код: Выделить весь код
if FileList[0] = '' then FileList[0] := '*.*';
...
if FileList[0] <> '' then
    for i := 0 to GetArrayLength(FileList)-1 do
Нужно:
Код: Выделить весь код
if GetArrayLength(FileList) = 0 then
begin
  SetArrayLength(FileList, 1);
  FileList[0] := '*.*';
end;
...
if GetArrayLength(FileList) > 0 then
    for i := 1 to GetArrayLength(FileList)-1 do
Цитата Gnom_aka_Lexander:
библиотека isdone не предназначена ни для сжатия, ни для разбития на тома »
Gnom_aka_Lexander, хоть буду знать для чего она.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:07, 01-11-2012 | #1193


Ветеран


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

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


Gnom_aka_Lexander да я уже нашел,просто забыл удалить сообщение,но все равно спс

Отправлено: 18:08, 01-11-2012 | #1194


Аватара для Johny777

Ветеран


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

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


El Sanchez, спасибо за правку! я понял своё косячище
теперь ошибка не вылезает!
вот только с этой строкой ( for i := 1 to GetArrayLength(FileList)-1 do ... ) попытаться извлечь 2 файла из архива ['half-life high definition.gcf', 'se15\counter-strike.gcf'], то извлечётся только второй фаил
'se15\counter-strike.gcf' с индексом 1,
поэтому ( for i := 0 to GetArrayLength(FileList)-1 do ... ) приводит к нужному результату
======
с FileList[0] := '*.*' извлекаются только файлы лежащие в корне архива. Те, напимер, 'se15\counter-strike.gcf' не распакуется
получается если массив пустой то делать вообще ничего не надо (в смысле никакие параметры архиватору не нужны)
только если не пустой нужен код:
Код: Выделить весь код
    if GetArrayLength(FileList) > 0 then
    for i := 0 to GetArrayLength(FileList)-1 do
    begin
        s7cmd := s7cmd + ' -i';
        if RecurseFolders then s7cmd := s7cmd + 'r';
        s7cmd := s7cmd + '!"' + RemoveQuotes(FileList[i]) + '"';
    end;
вывод:
извлекаем все файлы с подкаталогами. Те реально всё - SevenZipExtractArchive(szStatus.Handle, 'C:\hl1.VALVE', [], False, True, '', True, 'c:\setup', False, CallbackAddr('ArchiverCallbackProc'));
извлекаем нужные файлы : SevenZipExtractArchive(szStatus.Handle, 'C:\hl1.VALVE', ['half-life high definition.gcf', 'se15\counter-strike.gcf'], False, True, '', True, 'c:\setup', False, CallbackAddr('ArchiverCallbackProc'));

Проверено. Работает.
хотя прошу желающих на всякий случай потестить
вот тестовый архив: http://sendfile.su/700617
========
функция целиком:
читать дальше »
Код: Выделить весь код
function SevenZipExtractArchive(hWnd: HWND; ArchiveFilename: String; FileList: TArrayOfString;
RecurseFolders: Boolean; OverwriteExistingFiles: Boolean; Password: String; ExtractFullPaths: Boolean; ExtractBaseDir: String; ShowProgress: Boolean; Callback: Longint): Integer;
var
    S7ResultOutput, s7cmd: AnsiString;
    i: Integer;
begin
    Result := SZ_ERROR;
    if not FileExists(ArchiveFilename) then Exit;
    //
    //if FileList[0] = '' then FileList[0] := '*.*';
    if Callback <> 0 then ShowProgress := False;
    if ExtractFullPaths then s7cmd := 'x' else s7cmd := 'e';
    s7cmd := s7cmd + ' "' + ArchiveFilename + '" -o"' + ExtractBaseDir + '"';
   // s7cmd := s7cmd + ' "' + FileList[0] + '"';
    //
//    if GetArrayLength(FileList) = 0 then
//    begin
//        SetArrayLength(FileList, 1);
//        MsgBox('0',mbError, MB_OK);
//        FileList[0] := '*.*';
//    end;
    if GetArrayLength(FileList) > 0 then
    for i := 0 to GetArrayLength(FileList)-1 do
    begin
        s7cmd := s7cmd + ' -i';
        if RecurseFolders then s7cmd := s7cmd + 'r';
        s7cmd := s7cmd + '!"' + RemoveQuotes(FileList[i]) + '"';
    end;
    //
    if RecurseFolders then s7cmd := s7cmd + ' -r';
    if Password <> '' then s7Cmd := s7Cmd + ' -p' + Password;
    if OverwriteExistingFiles then s7cmd := s7cmd + ' -aoa' else s7cmd := s7cmd + ' -aos';
    if not ShowProgress then s7cmd := s7cmd + ' -hide';
    s7cmd := s7cmd + ' -y';
    try
        s7ResultOutput := StringOfChar(#0, 10240);
        if Callback <> 0 then
        begin
            //get handles for 7-zip callback thread
            hProgress := ProgressPage.ProgressBar.Handle;
            hMsg1Label := ProgressPage.Msg1Label.Handle;
            hMsg2Label := ProgressPage.Msg2Label.Handle;
            //show progress page
            ProgressPage.Show;
            ProgressPage.ProgressBar.Show;
            ProgressPage.Description := 'Extract';
            //set callback
            SevenZipSetOwnerWindowEx(hWnd, Callback);
        end;
        Result := SevenZip(hWnd, s7cmd, S7ResultOutput, Length(s7ResultOutput)-1);
    finally
        if Callback <> 0 then
        begin
            ProgressPage.Hide;
            SevenZipKillOwnerWindowEx(hWnd);
        end;
        //MsgBox(S7ResultOutput, mbInformation, MB_OK);
    except
        Result := SZ_DLLERROR;
    end;
end;


PS:
блин
возможности у кода суперские
любой параметр ком.строки можно загнать в функцию (при необходимости настраивать через входные параметры)
и ещё куча функций (типа SevenZipGetArchiveType или SevenZipCheckArchive)

hl1.VALVE есть 7зип архив(не sfx). я только поменял расширение "7z" на имя всем известной конторы (для понта)

Последний раз редактировалось Johny777, 01-11-2012 в 22:16.


Отправлено: 21:12, 01-11-2012 | #1195


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

Ветеран


Contributor


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

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


Цитата Johny777:
вот только с этой строкой ( for i := 1 to GetArrayLength(FileList)-1 do ... ) попытаться извлечь 2 файла из архива ['half-life high definition.gcf', 'se15\counter-strike.gcf'], то извлечётся только второй фаил »
Johny777, ну, дык, первый файл должен (хотя и не обязательно) в комстроке писаться без параметра -i. Извлечение первого файла описано в строке s7cmd := s7cmd + ' "' + FileList[0] + '"', следующие файлы идут через цикл через параметр -i, поэтому цикл начинается со второго элемента (for i=1...). Но параметр -i можно применить и к первому извлекаемому файлу, это не ошибка, поэтому вот эту часть можно выбросить, да и не нужно маску указывать, если извлекаются все файлы:
Цитата Johny777:
// if GetArrayLength(FileList) = 0 then
// begin
// SetArrayLength(FileList, 1);
// MsgBox('0',mbError, MB_OK);
// FileList[0] := '*.*';
// end; »
...и оставить, как ты предложил
Код: Выделить весь код
    if GetArrayLength(FileList) > 0 then
    for i := 0 to GetArrayLength(FileList)-1 do
    begin
        s7cmd := s7cmd + ' -i';
        if RecurseFolders then s7cmd := s7cmd + 'r';
        s7cmd := s7cmd + '!"' + RemoveQuotes(FileList[i]) + '"';
    end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:44, 01-11-2012 | #1196


Аватара для Johny777

Ветеран


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

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


El Sanchez, если в пути есть русские символы, то 7зип архив не извлекается. Можно ли это исправить?

Отправлено: 20:26, 03-11-2012 | #1197


Аватара для R.i.m.s.k.y.

Ветеран


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

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


Johny777, комстрока? возможна проблема в кодировке, установщик работает с системной СР1251, а комстрока с ДОС кодировкой СР866

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!

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

Отправлено: 20:32, 03-11-2012 | #1198


Аватара для R.i.m.s.k.y.

Ветеран


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

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


Johny777, вот уж не думал что тебя, камрад, придется отправлять в шапку темы
Твой случай function AnsiToDos

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!

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

Отправлено: 21:11, 03-11-2012 | #1199


Аватара для R.i.m.s.k.y.

Ветеран


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

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


Johny777, дык одмин одмину друг, товарисч и мануал!
кстати даже если прогу поставить корректно в путь с пробелами и русскими буквами то не факт что она будет работать - тот же самый косяк может оказаться внутри проги
Формат 8.3 жив и здоров (8 символов на имя, 3 на расширение, толькр 10 цифр и 26 англ букв)

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!

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

Отправлено: 21:32, 03-11-2012 | #1200



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты 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
Inno Setup tradeukraine Вебмастеру 3 13-06-2006 20:39




 
Переход