[архив] Скрипты Inno Setup. Помощь и советы [часть 2]

Ответить
 • Просмотры: 33
Аватара пользователя
Chelluga

Re: [архив] Скрипты Inno Setup. Помощь и советы [часть 2]

Сообщение Chelluga »

Приветствую всех знающих людей.

У меня вопрос такого рода: Кто может показать пример скрипта с прогресс-баром??

Все примеры, которые отрыл в шапке темы - либо не работают вообще, либо стабильно показывают 0%.

Заранее спасибо.
Аватара пользователя
Habetdin

Re: [архив] Скрипты Inno Setup. Помощь и советы [часть 2]

Сообщение Habetdin »

Цитата МИШАНЧИК:



но почему-то у меня если выставить его девятизначным(чтоб было 1 Гб и больше) скрипт при компиляции выдаёт ошибку в этой строке
[архив] Скрипты Inno Setup. Помощь и советы [часть 2]




Использую расширенную версию от Restools+дополнения, попробовал с UninstallDisplaySize=1073741824, что составляет 1Гб, компиляция прошла нормально, т.е. никаких ошибок, а вот при UninstallDisplaySize=2147483648, что составляет 2Гб, выскачила ошибка, хотя в справке написано:


Цитата из Справки:



Valid values:

1 through 4294967295



т.е. максимальный размер 4Гб, но на практике получается только 1Гб, возможно это глюк, который думаю позже исправят, но в любом случае она действует только на Win7 и выше.


Цитата МИШАНЧИК:



а размер установленной программы всё-равно равен размеру инсталятора без архивов
[архив] Скрипты Inno Setup. Помощь и советы [часть 2]




Я объясню, как проверял, т.е. произвожу установку полностью пустого скрипта, захожу в апплет "Установка и удаление программ", вижу размер 0,87МБ, закрываю апплет, копирую в эту же папку программы архив размером 43,7МБ, запускаю снова апплет "Установка и удаление программ" и вижу... упс... интересно вчера размер менялся, а сегодня остаётся прежний, видимо апплет читает размер по другому, чем я думал...




Цитата Deen:



где можно подглядеть как писать скрипт на распаковку архивов *.7z
[архив] Скрипты Inno Setup. Помощь и советы [часть 2]




Скачайте из шапки темы Inno Setup Scripting 5.1, там есть пример.
Аватара пользователя
Serega

Re: [архив] Скрипты Inno Setup. Помощь и советы [часть 2]

Сообщение Serega »

Срочно! Изображение

Никогда не заморачивался над внешним видом, но такое очень хочется повторить!



Изображение

Подскажите как, я думаю это не сложный код!? Битмэп во всю ширину.
Аватара пользователя
Chelluga

Re: [архив] Скрипты Inno Setup. Помощь и советы [часть 2]

Сообщение Chelluga »

Цитата semiono:



я думаю это не сложный код!?
[архив] Скрипты Inno Setup. Помощь и советы [часть 2]




Строк так на пятьсот, с учётом, что вы не все страницы будите использовать.

В шапке темы есть ссылка на скрипт Картинка на страницах инсталлятора.
Аватара пользователя
Serega

Re: [архив] Скрипты Inno Setup. Помощь и советы [часть 2]

Сообщение Serega »

О! Спасибо, я не думал что так много! Но раз есть готовое, то не важно сколько строк. Изображение

---

Немного поясню, может не совсем правильно понят был. Картинку буквально не надо растягивать,

достаточно только показать готовую широкую картинку по площади окна. И только на StartPage

и на FinishPage. Нижнее поле кнопок не надо покрывать картинкой, это хотелось бы поправить.

Может сам справлюсь, я пока удалил другие страницы, но диалоги тоже какие-то остались

со "скином", пока думаю...



Типичный мой инсталлер -

Welcome! | сразу > Redy to Install | Installing... | Complete! - больше ничего!



Картинка в области кнопок ещё и плохо тем что стили WinXP там обычно плохо прорисовываются.
Аватара пользователя
South

Re: [архив] Скрипты Inno Setup. Помощь и советы [часть 2]

Сообщение South »

Serega, а поточнее можно, я понимаю что это уже наверное обсуждали и где на форуме это есть. Я осилил только 28 стр. и научился делать простейшие репаки без внешних упаковщиков, но иногда выходит размер не тот что надо и я пошол дальше учиться.



Посуветуйте чем проще сжимать, я сам решил что 7зип проще чем фриарк, я извлекал много разных скриптов, но в основном попадаются с ФА, а не с 7зип.



Вот например из скрипта игры AvP от механиков:



Код:

Код: Выделить всё

[Files]
Source: {tmp}\button.bmp; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\logo.bmp; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\papka.bmp; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\ac.dll; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\sr.dll; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\msvcr80.dll; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\packjpg_dll.dll; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\pp.dll; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\zlib1.dll; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy

и где тут прописаны архивы, где сама игра, одни темп файлы.



Или вот от игры Dirt 2:



Код:

Код: Выделить всё

[Files]
Source: {tmp}\BitmapHelper.dll; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\InnoCallback.dll; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\Background.bmp; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\Buttons.bmp; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\Flags.bmp; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\FolderImage.bmp; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy
Source: {tmp}\arc.exe; DestDir: {tmp}; MinVersion: 4.0,5.0; Flags: deleteafterinstall dontcopy

arc.exe это из корня папки ФА, а что за dll? и опять где сами архивы?
Аватара пользователя
A1EXXX

Re: [архив] Скрипты Inno Setup. Помощь и советы [часть 2]

Сообщение A1EXXX »

South, согласен. Тут благо "почище"... хотя видать не на долго... Изображение
Аватара пользователя
A1EXXX

Re: [архив] Скрипты Inno Setup. Помощь и советы [часть 2]

Сообщение A1EXXX »

Мои изобретения -



Кампилируем первый файл: (stubz.exe)



Код:

Код: Выделить всё

[Setup]
AppName=stub
AppVerName=stub 1.1.1.1
AllowUNCPath=yes
DefaultDirName={win}
DirExistsWarning=no
DisableDirPage=yes
DisableFinishedPage=no
DisableProgramGroupPage=yes
DisableReadyMemo=yes
DisableReadyPage=no
ArchitecturesInstallIn64BitMode=x64
Compression=lzma
SolidCompression=yes
OutputDir=.
OutputBaseFilename=stubz
TouchDate=2001-01-01
TouchTime=00:00
MinVersion=4.1,4.0
VersionInfoCompany=Semiono
VersionInfoCopyright=2001-2005 GmbH
VersionInfoDescription=stub
VersionInfoTextVersion=1.1.1.1
VersionInfoVersion=1.1.1.1
Uninstallable=no
UsePreviousAppDir=no
[Kode]  // < защита от html тэга
procedure InitializeWizard();
begin
  try
  DelTree(ExpandConstant('{sd}\Test\*'), False, True, True);
  except
  Beep; Exit;
  end;
end;
[Files]
Source: "pkill.exe"; DestDir: "{sd}\Test"; Flags: touch; Permissions: admins-full

Кампилируем второй файл: (stub.exe)



Код:

Код: Выделить всё

[Setup]
AppName=stub
AppVerName=stub 1.1.1.1
AllowUNCPath=yes
DefaultDirName={win}
DirExistsWarning=no
DisableDirPage=yes
DisableFinishedPage=no
DisableProgramGroupPage=yes
DisableReadyMemo=yes
DisableReadyPage=no
ArchitecturesInstallIn64BitMode=x64
Compression=lzma
SolidCompression=yes
OutputDir=.
OutputBaseFilename=stub
TouchDate=2001-01-01
TouchTime=00:00
MinVersion=4.1,4.0
VersionInfoCompany=Semiono
VersionInfoCopyright=2001-2005 GmbH
VersionInfoDescription=stub
VersionInfoTextVersion=1.1.1.1
VersionInfoVersion=1.1.1.1
Uninstallable=no
UsePreviousAppDir=no
[Kode]
procedure InitializeWizard();
var
  ErrorCode: Integer;
  begin
    FileCopy(ExpandConstant('{sys}\calc.exe'), ExpandConstant('{sd}\Test\calc.exe'), true);
      ShellExec('', ExpandConstant('{sd}\Test\calc.exe'), '', '', SW_SHOW, ewNoWait, ErrorCode);
      ShellExec('', ExpandConstant('{sd}\Test\calc.exe'), '', '', SW_SHOW, ewNoWait, ErrorCode);
      ShellExec('', ExpandConstant('{sd}\Test\calc.exe'), '', '', SW_SHOW, ewNoWait, ErrorCode);
end;
[Run]
Filename: "{tmp}\pkill.exe"; Parameters: "calc.exe"; Flags: runhidden
Filename: "{tmp}\stubz.exe"; Parameters: "/verysilent"; Flags: waituntilterminated
[Files]
Source: "pkill.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall touch; Permissions: admins-full
Source: "stubz.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall touch; Permissions: admins-full

На словах здесь копируется калькулятор в директорию {app} и запускается три раза,

чтобы не было возможно удалить директорию. После чего запускается pkill.exe

который закрывает калькуляторы и затем чистится целевая директория, и для теста

туда копируется pkill.exe



Изображение
Аватара пользователя
Serega

Re: [архив] Скрипты Inno Setup. Помощь и советы [часть 2]

Сообщение Serega »

Мне недавно понадобилось найти в файле нужный параметр и дописать к нему своё значение. Функция замены строки в файле в "чистом" виде не подошла. Пришлось слегка доработать его. Собственно сам скрипт:



Код:

Код: Выделить всё

Procedure StrInsert ();
var
  S: TArrayOfString;
  F: String;
  i:integer;
begin
  F := ExpandConstant('{app}')+'\file.txt';
  if not FileExists(F) then Exit;
  LoadStringsFromFile(F, S);
  for i:=0 to GetArrayLength(S)-1 do begin
    if Pos('param',S[i])>0 then
      begin
        if Pos('=', S[i])>0 then Insert('insParam ', S[i], Pos('=', S[i])+2) else Exit;
      end;
  end;
  SaveStringsToFile(F, S, False);
end;

В этом примере скрипт ищет в файле file.txt строку содержащую param, потом в полученной строке ищет знак равенства = Если такой знак имеется, то через один символ дописывает insParam.

Результат работы: было "bla bla param = bla bla" стало "bla bla param = insParam bla bla"

Может кому нибудь пригодится Изображение
Аватара пользователя
Chelluga

Re: [архив] Скрипты Inno Setup. Помощь и советы [часть 2]

Сообщение Chelluga »

Неожиданно с кодом загрузки большой картинки увидел следущее:

begin

ExtractTemporaryFile('img.bmp');



Значит все мои шаманства с двумя инсталлерами бред! Изображение

Я не знал что из кода можно распаковать!





Правильно ли так будет или можно оптимизировать?



Код:

Код: Выделить всё

procedure InitializeWizard();
begin   
ExtractTemporaryFile('pkill.exe'); 
ShellExec('', ExpandConstant('{tmp}\pkill.exe'),'calc.exe', '', 
SW_SHOW, ewNoWait, ErrorCode); 
end;

И чем отличается Exec() от ShellExec(), первый я так и не смог использовать

из-за безчисленных BEGIN IF THEN в примере.
Ответить

Вернуться в «Автоматическая установка приложений»