ISDone

DLL ISDone 0.6 final

Нет прав для скачивания

p1st0n

Новичок
как в секции ISExec для 7z.exe вставить файл-лист для запаковки в архив определённых файлов?
в батнике например вот так "7z a en.pak @listfile.txt" норм всё работает
вот в исдон куда вставить этот listfile.txt?
Код:
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;
 

L-e-o-N

Старожил
как в секции ISExec для 7z.exe вставить файл-лист для запаковки в архив определённых файлов?
в батнике например вот так "7z a en.pak @listfile.txt" норм всё работает
вот в исдон куда вставить этот listfile.txt?
Код:
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;
Код:
ExpandConstant('{tmp}\7z.exe')
- отвечает за 7z в батнике
Код:
ExpandConstant ('a -t7z -m0=Copy -mx0 -ms=off -sccUTF-8 -bb0 "{app}\nativePC\en.pak" "{app}\nativePC\*.*"')
- это команда
чтобы было как в батнике нужно написать
Код:
ExpandConstant ('a en.pak @listfile.txt')
 

p1st0n

Новичок
это команда
чтобы было как в батнике нужно написать
спс, но я уже немного по другому сделал через параметр -ir@listfile.txt
Код:
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;
 
Последнее редактирование:

SBalykov

Старожил
Может быть кому-нибудь пригодится использование многоязычной установки.
Код:
[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;
 

Вложения

Bounty

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

Вложения

Косой

Новичок
Естественно выдаст ошибку, потому что в строках распаковки и есть ошибка:
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} почему-то.
 

Bounty

Мимокрокодил
Естественно выдаст ошибку, потому что в строках распаковки и есть ошибка:
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} почему-то.
Спасибо большое! Сам не знал, что делать. Ну, пора стать репакером, полагаю.
 

Bounty

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

Infest

Новичок
Народ, помогите решить проблему. Возникла такая ситуация с компонентами.

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

nik1967

Old Men
Проверенный
Infest, в справке к ISDone: ISDone => Описание скрипта
Код:
чуть далее видим: 

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

Новичок
nik1967, премного благодарен! Помогло. Впредь и дальше буду заглядывать в справку, дабы не задавать глупых вопросов)))
 

Mr.Weegley

Новичок
Не смог найти инфу по двум прогресбарам. Можно как то сделать что бы один отображал общий прогресс, а второй - прогресс файла? Или это зависит от формата архива? Пакую CLS-Precompinside отсюда, распаковываю
Код:
if not ISArcExtract ( 0, 100, ExpandConstant('{src}\*.bin'), ExpandConstant('{app}'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
 

Sergei1981

Новичок
Гуру. Помогите на примере оригинального скрипта isdone, убрать прогресс бары, оставить только проценты и время.
 
Сверху