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

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

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

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

Ветеран


Contributor


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


Конфигурация

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


Изменения
Автор: Vadikan
Дата: 22-05-2012
Описание: Закрыто
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
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. Помощь и советы [часть 5]

Отправлено: 18:01, 29-08-2011

 

Аватара для Johny777

Ветеран


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

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


Цитата Rikill:
Закрытый вариант. »
?
Цитата Rikill:
у меня есть лучше »
можешь поделиться?
Цитата Rikill:
Зависит не известно от чего. »
там где я нашёл эти решения писали, что зависит от уровня убитости виндоуса

Последний раз редактировалось Johny777, 06-03-2012 в 00:28.


Отправлено: 22:33, 05-03-2012 | #931



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

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


Аватара для YURSHAT

Старожил


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

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


Цитата Rikill:
ohny777, это кривые варианты. У некоторых не будет работать. »
Если немного подправить, то заработает у всех

Цитата FanN:
И еще вопрос: как вшить в инсталлятор свой шрифт? »
Установка временного шрифта
Код: Выделить весь код
#define Font "Alterna.ttf"
#define FontName "Alterna"

[Setup]
AppName=SetTemporaryFont
AppVerName=SetTemporaryFont
DefaultDirName={pf}\SetTemporaryFont
OutputBaseFilename=setup

[Files]
Source: {#Font}; Flags: dontcopy

[Code ]

var
  IsCustomFontInstalled: boolean;
  FontName: string;

function AddFontResource(FileName: PAnsiChar): Integer; external 'AddFontResourceA@gdi32.dll stdcall';
function RemoveFontResource(FileName: PAnsiChar): BOOL; external 'RemoveFontResourceA@gdi32.dll stdcall';

function InitializeSetup: boolean;
begin
  FontName:='Tahoma';
  ExtractTemporaryFile('{#Font}');
  IsCustomFontInstalled:=AddFontResource(ExpandConst  ant('{tmp}')+'\{#Font}')>0;
  if IsCustomFontInstalled then PostMessage(HWND_BROADCAST,$1D,0,0);
  if FontExists('{#FontName}') then FontName:='{#FontName}' else FontName:='Arial';
  if IsCustomFontInstalled then FontName:='{#FontName}';
  Result:=True;
end;

procedure InitializeWizard;
begin
  WizardForm.Font.Name:=FontName;
end;

procedure DeinitializeSetup;
begin
  WizardForm.Free
  if IsCustomFontInstalled then
  if RemoveFontResource(ExpandConstant('{tmp}')+'\{#Font}') then PostMessage(HWND_BROADCAST,$1D,0,0);
end;

-------
Если я знаю, что знаю мало, я добьюсь того, чтобы знать больше... В.И. Ленин
Krinkels.org - сжатие данных и создание инсталляторов

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

Отправлено: 01:49, 06-03-2012 | #932


Аватара для Aquila

Ветеран


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

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


Я бы хотел спросить можно ли сжать файлы лучше чем ultra ? Может быть 7z'ом запаковать и можно чтобы он извлекал из файла .7z но показывал как обычную распаковку программой ?

-------
На всех не угодишь!


Отправлено: 13:50, 06-03-2012 | #933


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

Ветеран


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

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


Aquila, Inno и сам использует 7z, так что смысла нет

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

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

Отправлено: 14:16, 06-03-2012 | #934


Аватара для Aquila

Ветеран


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

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


R.i.m.s.k.y., А файлы .arc - это что ? Замечал что есть инсталяторы inno setup с использованием этих архивов.

-------
На всех не угодишь!


Отправлено: 14:25, 06-03-2012 | #935


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

Ветеран


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

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


Aquila, не поверишь - freearc!
но лично я не вижу смысла в нем, места занимают не намного меньше, а калорийности требуют сильно больше, при установке требуется для распаковки рама, место на жеском и время.
Это не твой выбор, бро!

кстати про 7зип: я делал дистр Ведьмака1 на инно с максимальным сжатием, и для сравнения сжал эту же папку 7зипом с теми же настройками, так вот инно утоптал на 100 метров сильнее, хотя при общем весе почти 9 гиг эти 100 метров что слону булочка

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

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

Отправлено: 14:27, 06-03-2012 | #936


Аватара для Aquila

Ветеран


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

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


R.i.m.s.k.y., Спасибо за подробное пояснение

-------
На всех не угодишь!


Отправлено: 14:38, 06-03-2012 | #937


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

Ветеран


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

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


Aquila, да пожалста!
"полезное сообщение" давануть не забудь!

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

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

Отправлено: 14:44, 06-03-2012 | #938


Аватара для Johny777

Ветеран


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

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


Aquila,
настройка стндартных средств на максимальное сжатие
сожми с разными размерами словаря и узнаешь что тебе лучше
Compression=lzma2/ultra64
LZMAUseSeparateProcess=yes
LZMAMatchFinder=BT
LZMANumFastBytes=273
LZMADictionarySize=262144
///LZMADictionarySize=131072
InternalCompressLevel=ultra64
///SolidCompression=true
MergeDuplicateFiles=true
___________________________________________________________

сделал деинсталятор с выбором компонентов:
1. в основной установщик вписать это
читать дальше »
Код: Выделить весь код
[Setup]
/// привык держать деинсталятор в отдельной папке
UninstallFilesDir={app}\uninstall

[Files]
/// эта строка в конце секции, тк наш заранее скомпилированный деинсталятор пакуется вместе с файлами основного инсталятора и разумно будет распаковать его в конце
Source: uninstall\Setup\Uninstall.exe; DestDir: {app}\uninstall; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension;

[UninstallDelete]
/// удаление приложени нацелено на удаление всей папки!
Type: filesandordirs; Name: {app}

[_Code]
procedure CurPageChanged(CurPageID: Integer); 
  begin
    if CurPageID=wpInstalling then
      begin
/// переименовываем созданный автоматом родной деинсталятор в например unins007.exe и unins007.dat
        if FileExists(ExpandConstant('{app}\uninstall\unins000.exe')) then
        RenameFile(ExpandConstant('{app}\uninstall\unins000.exe'), ExpandConstant('{app}\uninstall\unins007.exe'))
        if FileExists(ExpandConstant('{app}\uninstall\unins000.dat')) then
        RenameFile(ExpandConstant('{app}\uninstall\unins000.dat'), ExpandConstant('{app}\uninstall\unins007.dat'))
/// теперь переименовываем наш деинсталятор в родное название (см выше) unins000.exe
        if FileExists(ExpandConstant('{app}\uninstall\Uninstall.exe')) then
        RenameFile(ExpandConstant('{app}\uninstall\Uninstall.exe'), ExpandConstant('{app}\uninstall\unins000.exe'))
      end;
end;

в основном скрипте мы закончили


2. сам деинсталятор
читать дальше »
Код: Выделить весь код
#define MyAppName "Uninstall"

[Setup]
AppId=proto15
SourceDir=.
OutputDir=Setup
AppName={#MyAppName}
AppVerName={#MyAppName}
AppVersion={#MyAppName}
CreateAppDir=false
OutputBaseFilename={#MyAppName}
Uninstallable=false
//SetupIconFile=hl2.ico

ShowLanguageDialog=auto
LanguageDetectionMethod=uilanguage
UsePreviousLanguage=no
DisableProgramGroupPage=yes
DisableWelcomePage=yes
DisableDirPage=yes
DisableReadyPage=yes
DisableFinishedPage=yes




[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl
Name: en; MessagesFile: compiler:Languages\English.isl




[Components]
Name: hl2; Description: Half-life 2; Check: del_hl2
Name: ep1; Description: Half-life 2 Episode One; Check: del_ep1
Name: ep2; Description: Half-life 2 Eposode Two; Check: del_ep2
Name: portal; Description: Portal; Check: del_portal

///всё как с обычно - файлы помеченные одним компонентов или несколькими, если фай общий, но заде для секции [InstallDelete], которая выполняется перед установкой
[InstallDelete]
Type: filesandordirs; Name: {src}\..\common\half-life 2; Components: hl2
Type: filesandordirs; Name: {src}\..\common\half-life 2 episode one; Components: ep1
Type: filesandordirs; Name: {src}\..\common\half-life 2 episode two; Components: ep2
Type: filesandordirs; Name: {src}\..\common\portal; Components: portal

Type: files; Name: {src}\..\half-life 2 buka russian.gcf; Components: hl2
Type: files; Name: {src}\..\half-life 2 2007 base content.gcf; Components: hl2
Type: files; Name: {src}\..\half-life 2 content.gcf; Components: hl2
Type: files; Name: {src}\..\half-life 2 game dialog.gcf; Components: hl2
Type: files; Name: {src}\..\episode one 2007 content.gcf; Components: ep1
Type: files; Name: {src}\..\half-life 2 episode one.gcf; Components: ep1
Type: files; Name: {src}\..\episode two content.gcf; Components: ep2
Type: files; Name: {src}\..\episode two maps.gcf; Components: ep2
Type: files; Name: {src}\..\episode two materials.gcf; Components: ep2

Type: files; Name: {src}\..\source 2007 binaries 2.gcf; Components: hl2 and ep1 and ep2 and portal
Type: files; Name: {src}\..\half-life 2_russian.gcf; Components: hl2 and ep1 and ep2
Type: files; Name: {src}\..\portal content.gcf; Components: portal
Type: files; Name: {src}\..\portal english.gcf; Components: portal
Type: files; Name: {src}\..\portal russian.gcf; Components: portal
Type: files; Name: {src}\..\source 2007 shared materials.gcf; Components: hl2 and ep1 and ep2 and portal
Type: files; Name: {src}\..\source 2007 shared models.gcf; Components: hl2 and ep1 and ep2 and portal
Type: files; Name: {src}\..\source 2007 shared sounds.gcf; Components: hl2 and ep1 and ep2 and portal
Type: files; Name: {src}\..\source materials.gcf; Components: hl2 and ep1 and ep2 and portal
Type: files; Name: {src}\..\source models.gcf; Components: hl2 and ep1 and ep2 and portal
Type: files; Name: {src}\..\source sounds.gcf; Components: hl2 and ep1 and ep2 and portal
Type: files; Name: {src}\..\episode 1 shared.gcf; Components: ep1 and ep2
Type: files; Name: {src}\..\episodic 2007 shared.gcf; Components: ep1 and ep2
Type: files; Name: {src}\..\half-life 2 episode one russian.gcf; Components: ep1 and ep2
Type: files; Name: {src}\..\half-life 2 episode two english.gcf; Components: ep2
Type: files; Name: {src}\..\half-life 2 episode two russian.gcf; Components: ep2

Name: {commondesktop}\Half-Life 2.lnk; Type: files; Components: hl2
Name: {commondesktop}\Half-Life 2 Episode One.lnk; Type: files; Components: ep1
Name: {commondesktop}\Half-Life 2 Episode Two.lnk; Type: files; Components: ep2
Name: {commondesktop}\Portal.lnk; Type: files; Components: portal

[_Code]
/// здесь начинается проверка устанолен компонент или нет. Лучше всего проверять уникальный файл, но в моём случае проверяются одинаковые файлы, но в разных директориях /// начало ///провнрки
function del_hl2:boolean;
var
  sz:Integer;
  s:string;
begin
  Result:=True;
begin
 If (FileSearch('hl2.exe', ExpandConstant('{src}\..\common\half-life 2'))='') then
  Result:=False
end;
end;


function del_ep1:boolean;
var
  sz:Integer;
  s:string;
begin
  Result:=True;
begin
 If (FileSearch('hl2.exe', ExpandConstant('{src}\..\common\half-life 2 episode one'))='') then
  Result:=False
end;
end;


function del_ep2:boolean;
var
  sz:Integer;
  s:string;
begin
  Result:=True;
begin
 If (FileSearch('hl2.exe', ExpandConstant('{src}\..\common\half-life 2 episode two'))='') then
  Result:=False
end;
end;


function del_portal:boolean;
var
  sz:Integer;
  s:string;
begin
  Result:=True;
begin
 If (FileSearch('hl2.exe', ExpandConstant('{src}\..\common\portal'))='') then
  Result:=False
end;
end;

/// конец проверки.//// если какого то файла нет, то и нет чекбокса в окне списка компонентов

Var
  ResultCode: integer;
/// а теперь главное. Если удалить один компонет, то общие файлы не удаляться, тк используются другим компонентом. Я столкнулся с проблемой, что удалил всё, но основа остаётся, поэтому идёт такая же проверка как и сверху и если нет ни одного компонента (уникального файла, подтверждающего наличие компонента), то выпоняется родное удаление в очень тихом режиме и удаляется вся 
///папка. Разберём пример. При инициализации деинсталятор "видит" 2 компонента - hl2 и портал. При удалении только портала удаляется всё уникальное от портала, но hl2 и общие файлы ///остаются, тут же доходит до дейстий кода ниже. Идёт вторая проверка, но не нацеленная не на создание чекбокса, а на проверку есть ли хоть один компонент и он есть - это hl2. Вызываем //деинстаятор ещё раз и видим в списке только hl2. Удаляем и снова доходит до второй проверки на шаге ssDone. Он не видит не одного hl2.exe в разных директория, и вызывает другой //деинсталятор, который трёт всё
procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssDone then
    If (FileSearch('hl2.exe', ExpandConstant('{src}\..\common\half-life 2'))='') and (FileSearch('hl2.exe', ExpandConstant('{src}\..\common\half-life 2 episode one'))='') and
     (FileSearch('hl2.exe', ExpandConstant('{src}\..\common\half-life 2 episode two'))='') and (FileSearch('hl2.exe', ExpandConstant('{src}\..\common\portal'))='')
    then
  Exec(ExpandConstant('{src}\unins007.exe'),'/VERYSILENT','', SW_SHOW, ewNoWait, ResultCode);
end;
  
чтобы данный деинсталятор работал нужно знать общие,  и уникальные файлы приложения. А также нужен хотя бы оди уникальный файл на проверку наличия компонента.


проверено
работает как часы

Последний раз редактировалось Johny777, 06-03-2012 в 16:07.

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

Отправлено: 15:57, 06-03-2012 | #939


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

Ветеран


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

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


Johny777, тож вариант, но для разбора компонентов можно использовать ключ реестра \\\Registry\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{AppName}_is1\Inn o Setup[colon] Selected Components
ну и SolidCompression=true лучше не комментировать, а в секции Files для мелких файлов указывать флаг SolidBreak
Ну и можно добавить CompressionThreads=4

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

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

Отправлено: 16:05, 06-03-2012 | #940



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Test ferget Тест-форум 0 24-08-2011 01:25
test ! ! Aaa ! ! Тест-форум 0 23-04-2011 11:29
test Santa aka Snt Тест-форум 0 16-04-2011 22:35
test xolod. Программное обеспечение Linux и FreeBSD 0 19-04-2009 21:03
Test memory KEugeNik Хочу все знать 11 23-11-2003 23:11




 
Переход