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

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

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

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

Ветеран


Contributor


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


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

Профиль | Отправить 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

 

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


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

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


Как в "родных" установщиках для игр из серии "S.T.A.L.K.E.R." реализованы проверка системных требований и вывод информации о винчестерах, через библиотеку "get_hw_caps.dll"?
Или это сейчас не актуально?
Сколько смотрел на форуме - многие спрашивали... а кода я чё та так и не нашёл, предлагают другие варианты!
читать дальше »

И вообще интересуют все "примочки", которые есть в этих установщиках...
"Народную солянку" НЕ надо!!! Нужны разные "штуки", которые есть в оригинальных установщиках: проверка наличия уже установленной игры, системные требования, невозможность продолжения установки, инфа и винтах, установка DirectX до установки игры, регистрация и т.п.
Если есть скрипт оригинального установщика, - вообще отлично...

Отправлено: 19:56, 30-01-2012 | #711



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

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


Аватара для Johny777

Ветеран


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

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


TROY Diamond,
Цитата TROY Diamond:
Если есть скрипт оригинального установщика, - вообще отлично... »
есть для стакера
наткнулся когда листал предыдущие ветки этой темы
писали здешние умы
http://rghost.ru/36232050
в нём есть сис. требования
они же есть и в шапке
вот тебе ещё 2 решения на проверку сис. требований
http://rghost.ru/36232112

Отправлено: 21:28, 30-01-2012 | #712


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


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

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


Johny777

СПАСИБО ОГРОМНОЕ!!!

Насчёт удаления файлов есть способ если установка прервана и БЕЗ "визуальности".

За Сталкера отдельная благодарность!!!

Отправлено: 21:34, 30-01-2012 | #713


Аватара для Johny777

Ветеран


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

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


TROY Diamond,
за сталкера не мне спасибо а Serega и другим кто скрипт писал
я его только сохранил себе, чтоб изучить и знаний набраться
насчёт удаления проблем не вижу
когда нажимаешь отмену идёт "откат изменений" во время которого удаляется всё что успело установиться
хотя я и не пользуюсь модулем фриарка, но он тоже всё трёт при "Отмене"

если ты завршил процесс, то вручную
есть решение, что перед установкой проверят что в директории лежит и выдаёт запрс на "запустить" или "удалить" или "отмена"
http://rghost.ru/36233810

Отправлено: 22:39, 30-01-2012 | #714


Аватара для Dark_Delphin

Старожил


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

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


Всем привет.

Помогите вот с этой проблемкой:
Когда запускаю инсталл и высвечивается выбор языка, и когда я сразу закриваю этот выбор языка выдаёт такую ошибку:




Заранее спасибо.

-------
✘ _420.pp_✘


Отправлено: 01:57, 31-01-2012 | #715


Аватара для Johny777

Ветеран


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

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


ntrx,
кажется это из-за использования скина
у меня та же ошибка
используй автовыбор языка
вот так
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
ShowLanguageDialog=auto
LanguageDetectionMethod=uilanguage
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
будет язык в соответствии с языком системы и не будет окна выбора языка при запуске инсталятора
Из справки "При значении auto окно появится только в том случае, когда инсталлятор не найдет идентификатор языка."
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:00, 31-01-2012 | #716


Аватара для Gnom_aka_Lexander

Ветеран


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

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


Цитата Johny777:
кажется это из-за использования скина »
Вовсе нет. Это попытка выгрузки dll до ее инициализации. Serega давал мне както такое решение:
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[*code]
var
  Initialize:Boolean;

function InitializeSetup(): Boolean;
begin
  Initialize:=False; // инициализация еще не произошла.
  // Ваш код
  Result:=True;
end;

procedure InitializeWizard();
begin
  // Ваш код
  Initialize:=True;// к этому моменту инсталл уже работает, значит инициализация прошла упешно
end;

procedure DeinitializeSetup();
begin
  if Initialize then // если произошла инициализация, то выгружаем все,что нужно, в противном случае, в этом нет необходимости
  begin
    UnloadSkin;
    gdipShutdown;
  end;
end;

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

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

Отправлено: 10:41, 31-01-2012 | #717


Аватара для nik1967

Старожил


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

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


Цитата Johny777:
ну если у Вас соединилось, то дайте пожалуйста результат, а то я в тупике »
Как то так
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Files]
Source: descctrl.dll; Flags: dontcopy

[Tasks]
Name: need; Description: необходимо; GroupDescription: для првильной работы:; Check:
Name: need\no_steam; Description: выкл Steam (если включен); GroupDescription: для првильной работы:;
Name: need\direct_x; Description: установть/обновить DirectX; GroupDescription: для првильной работы;
Name: need\visual_c; Description: установть/отремонтировать VisualC++; GroupDescription: для првильной работы;
Name: need\hey; Description: ещё рекомендуется:; Flags: unchecked; GroupDescription: для првильной работы;
Name: need\hey\fonts; Description: установить шрифты; GroupDescription: для првильной работы;

[Components]
Name: "program"; Description: "Игра"; Types: full compact custom; Flags: fixed
Name: "help"; Description: "Помощь"; Types: full
Name: "Text"; Description: "Tехт"; Types: full
Name: "Text\en"; Description: "Aнглийский"; Flags: exclusive
Name: "Text\de"; Description: "Немецкий"; Flags: exclusive
Name: "Text\cn"; Description: "Китайский"; Flags: exclusive
Name: "Text\ru"; Description: "Русский"; Flags: exclusive
Name: "Voice"; Description: "Озвучка"; Types: full
Name: "Voice\en"; Description: "Английская"; Flags: exclusive
Name: "Voice\de"; Description: "Немецкая"; Flags: exclusive
Name: "Voice\ch"; Description: "Китайская"; Flags: exclusive
Name: "Voice\ru"; Description: "Русская"; Flags: exclusive
Name: "Voice\ru2"; Description: "Русская"; Flags: exclusive
Name: "Voice\ru3"; Description: "Русская"; Flags: exclusive

[_Code]
var
  Info, InfoCaption: TNewStaticText;
  InfoPanel: TPanel;

function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';
function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

procedure InitializeWizard;
begin
  WizardForm.TYPESCOMBO.Visible:= false;
  WizardForm.ComponentsList.Height := WizardForm.ComponentsList.Height + WizardForm.ComponentsList.Top - WizardForm.TYPESCOMBO.Top;
  WizardForm.ComponentsList.Top := WizardForm.TYPESCOMBO.Top;
  WizardForm.ComponentsList.Width := ScaleX(200);

  InfoPanel:= TPanel.Create(WizardForm);
with InfoPanel do 
begin
  Parent:= WizardForm.SelectComponentsPage;
  Caption := '';
  SetBounds(ScaleX(216),WizardForm.ComponentsList.Top,ScaleX(200),WizardForm.ComponentsList.Height);
  BevelInner := bvRaised;
  BevelOuter := bvLowered;
end;
  InfoCaption := TNewStaticText.Create(WizardForm);
with InfoCaption do 
begin
  Parent:= WizardForm.SelectComponentsPage;
  Caption:= 'Информация:';
  Left:= ScaleX(224);
  Top:= InfoPanel.Top - ScaleY(5);
  Font.Color:= clActiveCaption;
end;
  Info:= TNewStaticText.Create(WizardForm);
with Info do 
begin
  Parent:= InfoPanel;
  AutoSize:= False;
  SetBounds(ScaleX(6),ScaleY(12),ScaleX(188),WizardForm.ComponentsList.Height - ScaleY(18));
  WordWrap:= true;
end;
end;

Procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
    wpSelectComponents:
    begin
      InfoPanel.Parent:= WizardForm.SelectComponentsPage;
      InfoCaption.Parent:= WizardForm.SelectComponentsPage;
      Info.Caption:= 'Наведите на компонент, чтобы получить дополнительную информацию';
      disabledesc();
      enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
      'Короткое описание игры;'+ 
      'Дополнительная документация, на разных языках;'+
      'Техт игры;'+
      'Официальный английский текст от EA Games;'+
      'Официальный немецкий текст от неизвестного производителя;'+
      'Пиратский китайский текст;'+
      'Официальный русский текст от софтклаб;'+
      'Озвучка игры;'+
      'Официальная английская озвучка от EA Games;'+
      'Официальная немецкая озвучка от неизвестного производителя;'+
      'Пиратская китайская озвучка;'+
      'Официальная русская озвучка от софтклаб;'+
      'Русская озвучка от 7Wolf;'+
      'Русская озвучка от фаргуса;');
    end;

    wpSelectTasks:
    begin
      InfoPanel.Parent:= WizardForm.SelectTasksPage;
      InfoCaption.Parent:= WizardForm.SelectTasksPage;
      Info.Caption:= 'Наведите на задачу, чтобы получить дополнительную информацию';
      disabledesc();
      enabledesc(WizardForm.TasksList.Handle,Info.Handle,
      'Чтобы игра игралась;'+ 
      'Нужно сделать так;'+
      'Выключить Steam нафиг;'+
      'Зафигачить DirectX;'+
      'Намутить VisualC++;'+
      'А так же;'+
      'Воткнуть ненужные шрифты;');
    end; 
  end;
end;

procedure DeinitializeSetup();
begin
  disabledesc();
end;
Ну и не забыть добавить descctrl.dll

И ещё по Сталкеру
Код: Выделить весь код
;Всем известная игра S.T.A.L.K.E.R. при установке использует некоторые хитрости. Дело не в проверке системных требований или свободного
;места на диске. Самый важный момент при инсталляции перепакованной игры - создать правильный файл "fsgame.ltx". Данный файл представляет
;собой некоторый загрузчик данных. Любое неправильное его построение чревато глюками и неправильной работе игры. Чтобы создать абсолютно
;точную копию оригинала нужно выполнить следующий код (не забываем при сборке, чтобы файл "fsgame.ltx" был абсолютно пустой):
[_Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
S: String;
begin
If CurStep=ssPostInstall then
begin
S := ExpandConstant('{commondocs}\STALKER-SHOC\')
StringChangeEx(S, ':\', ':\|', True);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$app_data_root$=true|false|' + S + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_data$         = false|    true|    $fs_root$|        gamedata\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_ai$         = true|        false|    $game_data$|        ai\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_spawn$     = true|        false|    $game_data$|        spawns\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_anims$         = true|        true|    $game_data$|        anims\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_levels$     = true|        false|    $game_data$|        levels\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_meshes$     = true|        true|    $game_data$|        meshes\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_dm$         = true|        true|    $game_data$|        meshes\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_shaders$     = true|        true|    $game_data$|        shaders\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_sounds$     = true|        true|    $game_data$|        sounds\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_textures$     = true|        true|    $game_data$|        textures\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_scripts$     = true|        false|    $game_data$|        scripts\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_config$     = true|        false|    $game_data$|        config\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$level$         = false|    false|    $game_levels$' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_saves$     = true|        false|    $app_data_root$|    savedgames\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$logs$         = true|        false|    $app_data_root$|    logs\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$screenshots$     = true|        false|    $app_data_root$|    screenshots\' + #13, true);
end;
end;

-------
Если сообщение оказалось полезным для Вас, то помимо спасибо, можно нажать на "Полезное сообщение".


Последний раз редактировалось nik1967, 31-01-2012 в 12:16.

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

Отправлено: 11:41, 31-01-2012 | #718


Новый участник


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

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


Мне както Лександер подсказывал код, но он как вариант не подходит!!!
а то что можно сделать такой как я показал это 100%, я видел в какойто из версий Klite codec pack

Отправлено: 11:42, 31-01-2012 | #719


Аватара для Gnom_aka_Lexander

Ветеран


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

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


lmiol, в твоем случае, без содания дополнительной страницы компонентов, и описания кучи условий, вариант только такой:
читать дальше »
Код: Выделить весь код
[Setup]
AppName=Quake Live
AppVerName="Quake Live"
AppPublisher=Mio Dark Project
CreateAppDir=no

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

[Types]
Name: "full"; Description: "Все компоненты";
Name: "custom"; Description: "Выбрать компоненты"; Flags:  iscustom

[Components]
Name: "main"; Description: "Cтандартные файлы Quake Live"; Types: full custom; Flags: fixed
Name: "main2"; Description: "Премиум файлы Quake Live"; Types: full custom;
Name: "plug"; Description: "Плагин Quake Live"; Types: full custom;
Name: "browser"; Description: "Портативный Firefox под Quake Live"; Types: full custom;
Name: "manual"; Description: "Руководство и Награды"; Types: full custom;
Name: "anti"; Description: "Античит PunkBuster"; Types: full custom;

[CustomMessages]
HeaderLabelPage=Выберите тип вашего аккаунта
MyRadioCaption_1=Standart
MyRadioCaption_2=Premium / Pro
PageTextHeader=На этой странице Вы можете выбрать тип вашего аккаунта, который вы используете в игре.
MyText_1=Будут установлены файлы которые доступны для игроков без подписки.
MyText_2=Будут установлены файлы которые доступны для игроков с Premium/Pro подпиской.


[*code]
var
  MyNewPage: TWizardPage;
  MyRadioBtn:ArraY[0..1]of TNewRadioButton;

procedure GetInstType;
begin
  WizardForm.ComponentsList.ItemEnabled[1]:= MyRadioBtn[1].Checked or not MyRadioBtn[0].Checked;
  WizardForm.ComponentsList.Checked[1]:=MyRadioBtn[1].Checked or not MyRadioBtn[0].Checked;
  WizardForm.ComponentsList.Checked[4]:=MyRadioBtn[1].Checked or not MyRadioBtn[0].Checked;
end;

procedure GetInstTypePage;
var
  i:integer;
begin
  MyNewPage := CreateCustomPage(wpWelcome,
  ExpandConstant('{cm:HeaderLabelPage}'), '');

  with TNewStaticText.Create(WizardForm) do
  begin
    Width := WizardForm.InnerNotebook.Width;
    Height := ScaleY(26);
    WordWrap := True;
    Caption := ExpandConstant('{cm:PageTextHeader}');
    Parent := MyNewPage.Surface;
  end;

  for i:=0 to 1 do
  begin
    MyRadioBtn[i] := TNewRadioButton.Create(WizardForm);
    with MyRadioBtn[i] do
    begin
      Parent := MyNewPage.Surface;
      Top := ScaleY(50+i*70);
      Width := ScaleX(150);
      case i of
        0: begin
          Caption := ExpandConstant('{cm:MyRadioCaption_1}');
          Checked := True;
        end;
        1:Caption := ExpandConstant('{cm:MyRadioCaption_2}');
      end;
    end;

    with TNewStaticText.Create(WizardForm) do
    begin
      Parent := MyNewPage.Surface;
      SetBounds(ScaleX(16),ScaleY(68+i*70),WizardForm.InnerNotebook.Width - ScaleX(60),ScaleY(26));
      WordWrap := True;
      case i of
        0:Caption := ExpandConstant('{cm:MyText_1}');
        1:Caption := ExpandConstant('{cm:MyText_2}');
      end;
    end;
  end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  if (PageID <= wpSelectDir)
    and (PageID = wpReady)
      and (MyRadioBtn[1].Checked)
        then Result := True;
end;

procedure InitializeWizard();
begin
  GetInstTypePage;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID=wpSelectComponents then GetInstType;
end;
Цитата lmiol:
это 100%, я видел в какойто из версий Klite codec pack »
Конечно можно. создаешь еще одну страницу компонентов и делаешь привязки к старой по каждому пункту. Сам.

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


Последний раз редактировалось Gnom_aka_Lexander, 31-01-2012 в 12:52.

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

Отправлено: 12:47, 31-01-2012 | #720



Компьютерный форум 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




 
Переход