1. Уважаемые гости и пользователи форума.
    Администрация настоятельно рекомендует не регистрировать несколько аккаунтов для одного пользователя. При выявлении наличия мультиаккаунтов будут заблокированы все учетные записи данного пользователя.
    Аккаунты, зарегистрированные на временную почту будут также заблокированы.

DLL ISDone 0.6 final

Библиотека для распаковки arc, 7z, rar, pcf, srep архивов в InnoSetup.

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

    Регистрация:
    10 мар 2017
    Сообщения:
    30
    Симпатии:
    0
    Пол:
    Мужской
    да
    на нём висит
     
  2. Пользователь

    Регистрация:
    10 мар 2017
    Сообщения:
    30
    Симпатии:
    0
    Пол:
    Мужской
    как в секции ISExec для 7z.exe вставить файл-лист для запаковки в архив определённых файлов?
    в батнике например вот так "7z a en.pak @listfile.txt" норм всё работает
    вот в исдон куда вставить этот listfile.txt?
    Код (Text):
    if not ISExec ( 0, 0, 0, ExpandConstant('{tmp}\7z.exe'), ExpandConstant ('a -t7z -m0=Copy -mx0 -ms=off -sccUTF-8 -bb0 "{app}\nativePC\en.pak" "{app}\nativePC\*.*"'), ExpandConstant('{app}\'), '',false) then break;
     
  3. Пользователь

    Регистрация:
    1 дек 2015
    Сообщения:
    184
    Симпатии:
    60
    Пол:
    Мужской
    Код (Text):
    ExpandConstant('{tmp}\7z.exe')
    - отвечает за 7z в батнике
    Код (Text):
    ExpandConstant ('a -t7z -m0=Copy -mx0 -ms=off -sccUTF-8 -bb0 "{app}\nativePC\en.pak" "{app}\nativePC\*.*"')
    - это команда
    чтобы было как в батнике нужно написать
    Код (Text):
    ExpandConstant ('a en.pak @listfile.txt')
     
    p1st0n нравится это.
  4. Пользователь

    Регистрация:
    10 мар 2017
    Сообщения:
    30
    Симпатии:
    0
    Пол:
    Мужской
    спс, но я уже немного по другому сделал через параметр -ir@listfile.txt
    Код (Text):
    if not ISExec ( 0, 0, 0, ExpandConstant('{app}\nativePC\7z.exe'), ExpandConstant ('a -ir@listfile.txt -t7z -m0=Copy -mx0 -ms=off -sccUTF-8 -bb0 "{app}\nativePC\en.pak"'), ExpandConstant('{app}\nativePC\'), '...',false) then break;
     
    Последнее редактирование: 28 апр 2019
  5. Старожил

    Регистрация:
    31 мар 2015
    Сообщения:
    333
    Симпатии:
    171
    Пол:
    Мужской
    Может быть кому-нибудь пригодится использование многоязычной установки.
    Код (Inno):

    [files]
    Source: lang\*; Attribs: hidden; Flags: dontcopy

    [Languages]
    Name: che; MessagesFile: compiler:Languages\Chinese.isl
    Name: cze; MessagesFile: compiler:Languages\Czech.isl
    Name: dan; MessagesFile: compiler:Languages\Danish.isl
    Name: deu; MessagesFile: compiler:Languages\German.isl
    Name: eng; MessagesFile: compiler:Languages\English.isl
    Name: fin; MessagesFile: compiler:Languages\Finnish.isl
    Name: fre; MessagesFile: compiler:Languages\French.isl
    Name: ita; MessagesFile: compiler:Languages\Italian.isl
    Name: jap; MessagesFile: compiler:Languages\Japanese.isl
    Name: kor; MessagesFile: compiler:Languages\Korean.isl
    Name: ned; MessagesFile: compiler:Languages\Dutch.isl
    Name: nor; MessagesFile: compiler:Languages\Norwegian.isl
    Name: pol; MessagesFile: compiler:Languages\Polish.isl
    Name: por; MessagesFile: compiler:Languages\BrazilianPortuguese.isl
    Name: rus; MessagesFile: compiler:Languages\Russian.isl
    Name: spa; MessagesFile: compiler:Languages\Spanish.isl
    Name: swe; MessagesFile: compiler:Languages\Swedish.isl

    [code_]
    var Lang: String;

    function ChangeLanguage(Language: AnsiString): Boolean; external 'ChangeLanguage@{tmp}\isdone.dll stdcall delayload';

    procedure HideControls();
    begin
    ...
      case Lang of
      'che' : DeleteFile(ExpandConstant('{tmp}\chinese.ini'));
      'cze' : DeleteFile(ExpandConstant('{tmp}\czech.ini'));
      'dan' : DeleteFile(ExpandConstant('{tmp}\danish.ini'));
      'deu' : DeleteFile(ExpandConstant('{tmp}\german.ini'));
      'eng' : DeleteFile(ExpandConstant('{tmp}\english.ini'));
      'fin' : DeleteFile(ExpandConstant('{tmp}\finnish.ini'));
      'fre' : DeleteFile(ExpandConstant('{tmp}\french.ini'));
      'ita' : DeleteFile(ExpandConstant('{tmp}\italian.ini'));
      'jap' : DeleteFile(ExpandConstant('{tmp}\japanese.ini'));
      'kor' : DeleteFile(ExpandConstant('{tmp}\korean.ini'));
      'ned' : DeleteFile(ExpandConstant('{tmp}\dutch.ini'));
      'nor' : DeleteFile(ExpandConstant('{tmp}\norwegian.ini'));
      'pol' : DeleteFile(ExpandConstant('{tmp}\polish.ini'));
      'por' : DeleteFile(ExpandConstant('{tmp}\portuguese.ini'));
      'rus' : DeleteFile(ExpandConstant('{tmp}\russian.ini'));
      'spa' : DeleteFile(ExpandConstant('{tmp}\spanish.ini'));
      'swe' : DeleteFile(ExpandConstant('{tmp}\swedish.ini'));
      end;
    end;

    procedure CreateControls();
    begin
    ...
      case Lang of
      'che' : ExtractTemporaryFile('chinese.ini');
      'cze' : ExtractTemporaryFile('czech.ini');
      'dan' : ExtractTemporaryFile('danish.ini');
      'deu' : ExtractTemporaryFile('german.ini');
      'eng' : ExtractTemporaryFile('english.ini');
      'fin' : ExtractTemporaryFile('finnish.ini');
      'fre' : ExtractTemporaryFile('french.ini');
      'ita' : ExtractTemporaryFile('italian.ini');
      'jap' : ExtractTemporaryFile('japanese.ini');
      'kor' : ExtractTemporaryFile('korean.ini');
      'ned' : ExtractTemporaryFile('dutch.ini');
      'nor' : ExtractTemporaryFile('norwegian.ini');
      'pol' : ExtractTemporaryFile('polish.ini');
      'por' : ExtractTemporaryFile('portuguese.ini');
      'rus' : ExtractTemporaryFile('russian.ini');
      'spa' : ExtractTemporaryFile('spanish.ini');
      'swe' : ExtractTemporaryFile('swedish.ini');
      end;
    end;

    procedure CurStepChanged(CurStep: TSetupStep);
    begin
    ...
      case Lang of
      'che' : ChangeLanguage('Chinese');
      'cze' : ChangeLanguage('Czech');
      'dan' : ChangeLanguage('Danish');
      'deu' : ChangeLanguage('German');
      'eng' : ChangeLanguage('English');
      'fin' : ChangeLanguage('Finnish');
      'fre' : ChangeLanguage('French');
      'ita' : ChangeLanguage('Italian');
      'jap' : ChangeLanguage('Japanese');
      'kor' : ChangeLanguage('Korean');
      'ned' : ChangeLanguage('Dutch');
      'nor' : ChangeLanguage('Norwegian');
      'pol' : ChangeLanguage('Polish');
      'por' : ChangeLanguage('Portuguese');
      'rus' : ChangeLanguage('Russian');
      'spa' : ChangeLanguage('Spanish');
      'swe' : ChangeLanguage('Swedish');
      end;
    ...
    end;
     

    Вложения:

    • lang_isdone.7z
      Размер файла:
      15,4 КБ
      Просмотров:
      8
    andrey, agent555 и Косой нравится это.
  6. Новичок

    Регистрация:
    3 июл 2019
    Сообщения:
    4
    Симпатии:
    0
    Я начинающий в Inno Setup. Следуя туториалу, я выполнил все как есть, 3 строчки готовы. Но почему-то когда он доходит до последнего архива, то выдает ошибку: "Не найдено ни одного файла указанного для is7zipextract". Пробовал компилировать как на новых Inno Setup 6.0.2, так и на старых Inno Setup Ultra 5.5.1. Ничего не меняется. Да и в скрипте как-то ошибок не может быть, так как делал даже на чистой IsDone, и ничего.
     

    Вложения:

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

    Регистрация:
    28 янв 2016
    Сообщения:
    76
    Симпатии:
    33
    Пол:
    Мужской
    Естественно выдаст ошибку, потому что в строках распаковки и есть ошибка:
    if not ISSRepExtract ( 0, 0, ExpandConstant('{app}\1.srep'),ExpandConstant('{app}\1.7z'), false) then break;
    if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\1.7z'), ExpandConstant('{app}\data1'), false, '') then break;
    Ты файл среп->7z распаковываешь в {app}, а распаковку 7z уже берёшь из {src} почему-то.
     
  8. Новичок

    Регистрация:
    3 июл 2019
    Сообщения:
    4
    Симпатии:
    0
    Спасибо большое! Сам не знал, что делать. Ну, пора стать репакером, полагаю.
     
  9. Old Men Проверенный

    Регистрация:
    17 июн 2011
    Сообщения:
    466
    Симпатии:
    443
    Пол:
    Мужской
    А оно это тебе надо? Неблагодарное это дело.
     
  10. Новичок

    Регистрация:
    3 июл 2019
    Сообщения:
    4
    Симпатии:
    0
    Так, новая проблемка (а может и моя). Я сжал архив через Freearc, "-max -ld1600m". Как я заметил, он в добавку пережимает его Прекомпом. Итак, он пишет ошибку "Unsupported compression method precomp04+rep1566016kb+exe+delta+lzma:177mb:normal:bt4:128" (нужен код или dll, ибо расставаться с таким мощным способом сжатия не в моих интересах)
     
  11. Пользователь

    Регистрация:
    3 сен 2015
    Сообщения:
    43
    Симпатии:
    2
    Пол:
    Мужской
    Народ, помогите решить проблему. Возникла такая ситуация с компонентами.

    Код (Delphi):

    TmpValue:=TmpValue*2;
    if IsComponentSelected('blabla32') then Comps1:=Comps1+TmpValue;    //компонент 32
    TmpValue:=TmpValue*2;
    if IsComponentSelected('blabla33') then Comps1:=Comps1+TmpValue;    //компонент 33
    При этом компоненты до 32 устанавливается, а все остальные, начиная с 33 - нет. Кто сталкивался с подобным?
     
  12. Ветеран Проверенный

    Регистрация:
    18 июн 2011
    Сообщения:
    908
    Симпатии:
    667
  13. Old Men Проверенный

    Регистрация:
    17 июн 2011
    Сообщения:
    466
    Симпатии:
    443
    Пол:
    Мужской
    Infest, в справке к ISDone: ISDone => Описание скрипта
    Код (Inno):

    чуть далее видим:

    Comps1:=0; Comps2:=0; Comps3:=0;
    #ifdef Components
      TmpValue:=1;
      if IsComponentSelected('text\rus') then Comps1:=Comps1+TmpValue; //компонент 1
      TmpValue:=TmpValue*2;
      if IsComponentSelected('text\eng') then Comps1:=Comps1+TmpValue; // компонент 2
      TmpValue:=TmpValue*2;
      if IsComponentSelected('voice\rus') then Comps1:= Comps1+TmpValue; // компонент 3
      TmpValue:= TmpValue*2;
      if IsComponentSelected('voice\eng') then Comps1:= Comps1+TmpValue;// компонент 4
    // .....
    // см. справку
    #endif
    в данном кусочке идет расчет переменной, определяющей какие компоненты были выбраны пользователем. Тут происходит кодирование состояния чекбоксов в двоичную систему. Например, если первый чекбокс был установлен, бит 0 переменной устанавливается в 1, если второй чекбокс установлен — бит 1 равен так же 1 и т.д. (вспоминаем уроки информатики).
    Так как в Inno нет возможности пересылки в параметре функции указатель на массив, приходится использовать простые 32-битные слова. Приведу пример как использовать все 96 компонентов:

    TmpValue:=1;
    if IsComponentSelected('text\rus') then Comps1:=Comps1+TmpValue; //компонент 1
    TmpValue:=TmpValue*2;
    if IsComponentSelected('text\eng') then Comps1:=Comps1+TmpValue; //компонент 2
    TmpValue:=TmpValue*2;
    if IsComponentSelected('voice\rus') then Comps1:=Comps1+TmpValue; //компонент 3
    TmpValue:=TmpValue*2;
    if IsComponentSelected('voice\eng') then Comps1:=Comps1+TmpValue; //компонент 4

    .....

    TmpValue:=TmpValue*2;
    if IsComponentSelected(component32') then Comps1:=Comps1+TmpValue; //компонент 32

    //тут ВНИМАТЕЛЬНЕЕ ! Comps1 меняется на Comps2, в TmpValue заносится 1
    TmpValue:=1;
    if IsComponentSelected('
    component33') then Comps2:=Comps2+TmpValue; //компонент 33
    TmpValue:=TmpValue*2;
    if IsComponentSelected('
    component34') then Comps2:=Comps2+TmpValue; //компонент 34
    TmpValue:=TmpValue*2;
    if IsComponentSelected('
    component35') then Comps2:=Comps2+TmpValue; //компонент 35

    ....

    TmpValue:=TmpValue*2;
    if IsComponentSelected('
    component64') then Comps2:=Comps2+TmpValue; //компонент 64

    //тут ВНИМАТЕЛЬНЕЕ ! Comps2 меняется на Comps3, в TmpValue заносится 1
    TmpValue:=1;
    if IsComponentSelected('
    component65') then Comps3:=Comps3+TmpValue; //компонент 65
    TmpValue:=TmpValue*2;
    if IsComponentSelected('
    component66') then Comps3:=Comps3+TmpValue; //компонент 66

    ....

    TmpValue:=TmpValue*2;
    if IsComponentSelected('
    component96') then Comps3:=Comps3+TmpValue; //компонент 96
     
    Infest нравится это.
  14. Новичок

    Регистрация:
    3 июл 2019
    Сообщения:
    4
    Симпатии:
    0
  15. Ветеран Проверенный

    Регистрация:
    18 июн 2011
    Сообщения:
    908
    Симпатии:
    667
    использовать для сжатия PrecompInside
     
  16. Пользователь

    Регистрация:
    3 сен 2015
    Сообщения:
    43
    Симпатии:
    2
    Пол:
    Мужской
    nik1967, премного благодарен! Помогло. Впредь и дальше буду заглядывать в справку, дабы не задавать глупых вопросов)))
     

Поделиться этой страницей