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

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

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

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

Ветеран


Contributor


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


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

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

 

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

Ветеран


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

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


Подскажите, пожалуйста, как в инно задействовать механизм хранения версий библиотек и отката при деинсталляции
Конкретно надо следить за версиями avisynth.dll

Заранее благодарю!

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


Отправлено: 08:20, 24-01-2012 | #671



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

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


Аватара для Johny777

Ветеран


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

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


хотелось бы реализовать следующее
устанавливаются например 3 компонента из установщика
half life 2
half life 2 episode one
half life 2 episode two
уникальные файлы для каждой игры каждый в свою папку
общие файлы для всех файлов в общую - корневую
например
pf/Orange Box/half life 2/run_hl2.exe
pf/Orange Box/half life 2 ep1/run_hl2_ep1.exe
pf/Orange Box/source 2007 binaries 2.gcf
pf/Orange Box/source models.gcf
итд

логика такая
- Autorun с функцией поиска через реестр узнаёт куда установилась игра (думаю нужно в основном установщике в секции [Setup] задействовать параметр AppId
- потом, в директории игры ищет например app/half life 2/run_hl2.exe, и если он есть то появлялась кнопка запустить игру .Eсли его нет то кнопка неактивна или её нет

желательно что бы этот Autorun был бы не частью основного установщика и не было проблемы, что игру удалили вручную, а он предлагает запустить вместо того чтобы установить
в коде для описания компонентов видел функцию поиска файла
может подобная функция и нужна
function IsComponent3:boolean;
var
sz:Integer;
s:string;
begin
Result:=True;
begin
If (FileSearch('manual.txt', ExpandConstant('{src}\main'))='') then
Result:=False
end;
end;

есть уже почти готовый на одну игру
но адаптировать его мне не позволяет незнание паскаля
[Setup]
Код: Выделить весь код
SourceDir=.
OutputDir=Setup
AppName=preInstaller
AppVerName=preInstaller
AppVersion=preInstaller
CreateAppDir=false
OutputBaseFilename=preInstaller
DiskSpanning=false

DisableDirPage=true
DisableFinishedPage=true
DisableProgramGroupPage=true
DisableReadyPage=true
Uninstallable=false

[Messages]
SetupAppTitle=AutoRUN

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

[Files]
Source: ISSkin.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: steam.cjstyles; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: 1.bmp; Flags: dontcopy

(Code)
procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

function InitializeSetup:boolean;
begin
  ExtractTemporaryFile('steam.cjstyles');
  LoadSkin(ExpandConstant('{tmp}')+'\steam.cjstyles', '');
  Result:=True;
end;

procedure DeinitializeSetup;
begin
  ShowWindow(WizardForm.Handle,0);
  UnloadSkin();
end;
////////////////////////////////////////////////////////////////////////

const
  BM_CLICK    = $00F5;

var
  AutoRun: TSetupForm;
  img1: TBitmapImage;
  PlayButton, InstallButton, SupportButton, ReadmeButton, WebButton, ExitButton, UninstallButton: TButton;
  AppPath,UninsPath: string;
  ResultCode: Integer;
procedure CurPageChanged(CurPageID: Integer);
begin
  If CurPageID=wpWelcome then
  SendMessage(WizardForm.NextButton.Handle, BM_CLICK, 0, 0);
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
 Confirm:=False
 Cancel:=True
end;

procedure PlayButtonClick(Sender: TObject);
var
  exe: string;
begin
  exe:='shift.exe';
  if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\se15_is1','Install Dir', AppPath) then
  begin
    Exec(AddBackslash(AppPath) + Exe, '', ExtractFilePath(AddBackslash(AppPath) + Exe), SW_SHOWNORMAL,ewNoWait,ResultCode)
  AutoRun.Close;
  PostMessage(WizardForm.CancelButton.Handle, BM_CLICK, 0, 0);
  end
end;

procedure InstallButtonClick(Sender: TObject);
var
  CurPageID: Integer;
begin
  Exec(ExpandConstant('{src}\Setup.exe'),'','',SW_SHOW,ewNoWait,ResultCode)
  AutoRun.Close;
  PostMessage(WizardForm.CancelButton.Handle, BM_CLICK, 0, 0);
end;

procedure SupportButtonClick(Sender: TObject);
begin
  shellexec('open', ExpandConstant('{src}\Game.exe'), '', '',SW_SHOWNORMAL, ewnowait, ResultCode)
end;

procedure ReadmeButtonClick(Sender: TObject);
begin
  ShellExec('open', ExpandConstant('{src}\readme.txt'),'','', SW_SHOW, ewNoWait, ResultCode)
end;

procedure WebButtonClick(Sender: TObject);
begin
  shellexec('open', 'http://localhost', '', '',SW_SHOWNORMAL, ewnowait, ResultCode)
end;

procedure ExitButtonClick(Sender: TObject);
var
  CurPageID: Integer;
begin
  AutoRun.Close;
  PostMessage(WizardForm.CancelButton.Handle, BM_CLICK, 0, 0);
end;

procedure UninstallButtonClick(Sender: TObject);
begin
if RegQueryStringValue(HKLM, 'SOFTWARE\Game','UninstallString', UninsPath) then
  begin
    UninsPath:=RemoveQuotes(UninsPath)
    Exec(UninsPath,'','',SW_SHOWNORMAL,ewNoWait,ResultCode)
    AutoRun.Close;
    PostMessage(WizardForm.CancelButton.Handle, BM_CLICK, 0, 0);
  end
end;

procedure CreateAutoRun;
begin
  //AutoRun
  AutoRun := CreateCustomForm;
  with AutoRun do begin
    Left := 498;
    Top := 75;
    Width := 495;
    Height := 340;
    BorderIcons := [];
    BorderStyle:=bsToolWindow //(bsNone, bsSingle, bsSizeable, bsDialog, bsToolWindow, bsSizeToolWin)
    Color := clBtnFace;
    Font.Color := clWindowText;
    Font.Height := -11;
    Font.Name := 'MS Sans Serif';
    Font.Style := [];
    Position := poScreenCenter;
    Caption:='AutoRUN'
  end;
  //img1
  img1 := TBitmapImage.Create(AutoRun);
  ExtractTemporaryFile('1.bmp');
  with img1 do begin
    Parent := AutoRun;
    Left := 0;
    Stretch:= true;
    Top := 0;
    Width := Autorun.Width;
    Height := Autorun.Height;
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
  end;
  //PlayButton
  PlayButton:= TButton.Create(AutoRun);
  with PlayButton do begin
    Parent := AutoRun;
    Left := 300;
    Top := 110;
    Width := 150;
    Height := 22;
    Caption:= 'Íà÷àòü èãðó';
    Cursor:= crHand;
  // ModalResult:= mrOk;
    OnClick := @PlayButtonClick;
    if not RegQueryStringValue(HKLM, 'SOFTWARE\Game','Install Dir', AppPath) then
  begin
    PlayButton.Enabled := False;
  end;
  end;
  //InstallButton
  InstallButton:= TButton.Create(AutoRun);
  with InstallButton do begin
    Parent:= AutoRun;
    Left := 300;
    Top := 110;
    Width := 150;
    Height := 22;
    Caption:= 'Óñòàíîâèòü èãðó';
    Cursor:= crHand;
    OnClick := @InstallButtonClick;
  end;
  //SupportButton
  SupportButton:= TButton.Create(AutoRun);
  with SupportButton do begin
    Parent:= AutoRun;
    Left := 300;
    Top := 140;
    Width := 150;
    Height := 22;
    Caption:= 'Èíôî';
    Cursor:= crHand;
    OnClick := @SupportButtonClick;
  end;
  //ReadmeButton
  ReadmeButton:= TButton.Create(AutoRun);
  with ReadmeButton do begin
    Parent:= AutoRun;
    Left := 300;
    Top := 170;
    Width := 150;
    Height := 22;
    Caption:= 'Readme';
    Cursor:= crHand;
    OnClick := @ReadmeButtonClick;
  end;
  //WebButton
  WebButton:= TButton.Create(AutoRun);
  with WebButton do begin
    Parent:= AutoRun;
    Left := 300;
    Top := 200;
    Width := 150;
    Height := 22;
    Caption:= 'Âåá-ñàéò';
    Cursor:= crHand;
    OnClick := @WebButtonClick;
  end;
  //ExitButton
  ExitButton:= TButton.Create(AutoRun);
  with ExitButton do begin
    Parent:= AutoRun;
    Left := 300;
    Top := 260;
    Width := 150;
    Height := 22;
    Caption:= 'Âûõîä';
    Cursor:= crHand;
    OnClick := @ExitButtonClick;
//    ModalResult:= mrCancel;
  end;
  //UninstallButton
  UninstallButton:= TButton.Create(AutoRun);
  with UninstallButton do begin
    Parent:= AutoRun;
    Left := 300;
    Top := 230;
    Width := 150;
    Height := 22;
    Caption:= 'Óäàëèòü èãðó';
    Cursor:= crHand;
    OnClick := @UninstallButtonClick;
  end;

  if not RegQueryStringValue(HKLM, 'SOFTWARE\Game','UninstallString', UninsPath) then
  begin
    InstallButton.Enabled:=true;
    InstallButton.Visible:=true;
    UninstallButton.Enabled:=false;
    UninstallButton.Visible:=false;
  end;
  if RegQueryStringValue(HKLM, 'SOFTWARE\Game','UninstallString', UninsPath) then
  begin
    InstallButton.Enabled:=false;
    InstallButton.Visible:=false;
    UninstallButton.Enabled:=true;
    UninstallButton.Visible:=true;
  end;

  AutoRun.ShowModal;
end;

procedure InitializeWizard;
begin
  WizardForm.BeveledLabel.Enabled:=True;
  CreateAutoRun;
end;

заранее спасибо за помощь!

Последний раз редактировалось Johny777, 25-01-2012 в 14:36. Причина: добавлен код


Отправлено: 19:33, 24-01-2012 | #672


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

Ветеран


Contributor


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

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


Цитата sancheolz:
А надо бы сравнить даты изменения. Покопавшись немного решил, что можно сравнить даты штатными средствами windows через вызов bat или своей проги какой-нить. И поэтому возникла проблема как "достучаться" до файла в пакете. »
sancheolz, это сложная задача, т.к. "достучаться" до файла нужно на этапе препроцессинга (парсить строки секции Files, выдирать значение Source с учетом директивы SourceDir, масок, флагов типа external). Предлагаю функцию, где параметр - дата изменения файла-источника в формате YYYYMMDD. Разумеется, маски недопустимы. Файл будет установлен, если либо его нет в папке назначения, либо он есть, но дата изменения старше.
Код: Выделить весь код
[Files]
Source: test.txt; DestDir: {app}; Check: IsLastWriteTimeAttributeChanged('20110127')

[code]
type
    FILETIME = record
        dwLowDateTime, dwHighDateTime: DWORD;
    end;

    WIN32_FILE_ATTRIBUTE_DATA = record
        dwFileAttributes: DWORD;
        ftCreationTime, ftLastAccessTime, ftLastWriteTime: FILETIME;
        nFileSizeHigh, nFileSizeLow: DWORD;
    end;

    SYSTEMTIME = record
        wYear, wMonth, wDayOfWeek, wDay, wHour, wMinute, wSecond, wMilliseconds: WORD;
    end;

function GetFileAttributesEx(lpFileName: String; fInfoLevelId: DWORD; var lpFileInformation: WIN32_FILE_ATTRIBUTE_DATA): BOOL; external 'GetFileAttributesExA@kernel32.dll stdcall';
function FileTimeToSystemTime(const lpFileTime: FILETIME; var lpSystemTime: SYSTEMTIME): BOOL; external 'FileTimeToSystemTime@kernel32.dll stdcall';

function IsLastWriteTimeAttributeChanged(Param: String): Boolean;   //Param have YYYYMMDD format
var
    lpFileInformation: WIN32_FILE_ATTRIBUTE_DATA;
    lpSystemTime: SYSTEMTIME;
begin
    if FileExists(ExpandConstant(CurrentFileName)) then
    begin
        GetFileAttributesEx(ExpandConstant(CurrentFileName), $0, lpFileInformation);
        FileTimeToSystemTime(lpFileInformation.ftLastWriteTime, lpSystemTime);
        Result := Format('%.4d%.2d%.2d', [lpSystemTime.wYear, lpSystemTime.wMonth, lpSystemTime.wDay]) > Param;
    end else Result := True;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:34, 24-01-2012 | #673


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


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

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


Всем доброе утро у кого есть такой инсталлятор http://imageshack.us/photo/my-images...11ecfcb9b.jpg/ если есть дайте пожалуйста!

Отправлено: 05:46, 25-01-2012 | #674


Аватара для valyok666

Старожил


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

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


spaiders, Его сделать самому не трудно)

-------
Салтыков-Щедрин: "А надо учиться, учиться, учиться"

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

Отправлено: 07:31, 25-01-2012 | #675


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


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

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


Цитата valyok666:
spaiders, Его сделать самому не трудно) »
Я то не умею делать инсталляторы)) так бы не написал сюда)

Отправлено: 07:57, 25-01-2012 | #676


Аватара для valyok666

Старожил


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

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


spaiders, так тебе здесь чисто даром никто писать скрипт не будет....здесь помогают и объясняют

-------
Салтыков-Щедрин: "А надо учиться, учиться, учиться"

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

Отправлено: 11:23, 25-01-2012 | #677


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

Ветеран


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

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


Цитата valyok666:
spaiders, так тебе здесь чисто даром никто писать скрипт не будет »
а тех кто чисто недаром - быстро банят

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

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

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


Аватара для alert30

Ветеран


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

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


spaiders, если хочешь такой перепакованные инсталляторские скрипты, как на скрине, пиши в PM, скину.

upd 21:00: Добавлю, что каждый пользователь выкладывает скрины по перепакованных инсталляторов известных RePack групп; то этот супер RePack содержит много скриптов, содержаний и изменений.

Последний раз редактировалось alert30, 25-01-2012 в 19:00. Причина: Добавление, для тех, кто хочет сделать это, то это, как на скрине...


Отправлено: 18:54, 25-01-2012 | #679


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


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

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


El Sanchez, Спасибо огромное! Как же я сам не догадался вызов winAPI сделать, а то еще программистом себя называю. Дату файла из пакета я собираюсь узнать так: в качестве DestDir будет указана %TEMP%, уже от туда с использованием того же вызова winAPI будет извлечена дата, а затем из темпа файл отправится либо в {app} либо в /dev/null)) в соответствии с его актуальностью. Остается уповать на сохранность атрибута даты при всех распаковках\запаковках. Он ведь сохраняется?

Отправлено: 19:57, 25-01-2012 | #680



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




 
Переход