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

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

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

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

Ветеран


Contributor


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


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

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


Изменения
Автор: El Sanchez
Дата: 16-02-2015
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
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. Помощь и советы [часть 4]

Отправлено: 03:49, 21-05-2012

 

Аватара для alert30

Ветеран


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

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


Johny777, нет, файлы, которые уже распаковались из этого архива *.arc; вот мне надо удалить распакованные файлы. Архив *.arc удаляется, а вот распакованные файлы остаются.

Отправлено: 20:09, 23-07-2012 | #461



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

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


Аватара для Johny777

Ветеран


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

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


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

Отправлено: 20:25, 23-07-2012 | #462


Аватара для alert30

Ветеран


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

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


Johny777, еще, есть скрипт, который после установки и распаковки удаляет архив *.arc?

Отправлено: 20:42, 23-07-2012 | #463


Аватара для Johny777

Ветеран


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

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


alert30,
ты про это

Type: files; Name: {app}\FileName.arc
тип: файлы; имя(файла): {app}\FileName.arc
...
?
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:11, 23-07-2012 | #464


Аватара для alert30

Ветеран


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

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


Johny777, спасибо, сам доделал, кому нужен - вот код, чтобы удалить файл или архив после установки и распаковки:
Код: Выделить весь код
procedure CurPageChanged(CurPageID: Integer);
begin
  SetStateNewButtons;

  if CurPageID = wpFinished then
  begin
    DeleteFile(ExpandConstant('{app}\update.arc'));
  end;
  ImgApplyChanges(WizardForm.Handle);
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:30, 23-07-2012 | #465


Аватара для Johny777

Ветеран


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

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


alert30,
старайся как можно меньше вешать в переключение страниц CurPageChanged, тк они могут переключаться с тормозами, что не есть хрошо и красиво
в данном случае лучше используй этапы установки ssPostInstall(после установки) или ssDone(после нажатия на кнопку завершить на финишной странице)
всё что можно реализуй в procedure InitializeWizard();
пример:
читать дальше »
Код: Выделить весь код
procedure CurStepChanged(CurStep: TSetupStep);
begin
  case
    CurStep of
    ssPostInstall:
    begin
      DeleteFile(ExpandConstant('{app}\update.arc'));
      ImgApplyChanges(WizardForm.Handle);
    end;
    
    ssDone: тоже самое
  end;
end;


что такое ImgApplyChanges(WizardForm.Handle); ?
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:38, 24-07-2012 | #466


Аватара для alert30

Ветеран


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

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


Johny777, у меня другая проблема ISArcExtract:
Так вот написал так:
Код: Выделить весь код
if not ISArcExtract ( 0, 0, ExpandConstant('{userdesktop}\RK14\RK\rk.arc'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
компилированный сетапник с BIN-ами ищет то, что указано в коде {userdesktop}\RK14\RK\rk.arc и распаковывается, а Вот проблема в том, что я хочу на диск записывать и чтоб распаковалось из диска в HDD, компилированный сетапник с BIN-ами перенес в папку ISO, чтоб правильно тестировался финишной установки и можно смело записать на диск; запускаю из папки ISO компилированный сетап с BIN-ами, по поздним заданним путям из кода {userdesktop}\RK14\RK\rk.arc файл-архив rk.arc удалил, т.к. уже в внутри образа формата BIN-а, после нажатия "Установить" выдает такую ошибку: "Не найден ни одного файла ISArcExtract", но дело в том, что уже в внутри BIN-е, а не этим путям, как сделать так, что инсталлятор видел BIN-a сразу распаковался, а не из пути моего компьютера, т.е. {userdesktop}\RK14\RK\rk.arc (rk.arc удалил).

Отправлено: 01:03, 24-07-2012 | #467


Аватара для Johny777

Ветеран


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

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


alert30,
положи архив рядом с экзешником
юзай константу {src} (внешний)
кажись так
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\rk.arc'), ExpandConstant('{src}'), '', false, '', '', ExpandConstant('{src}'), notPCFonFLY {PCFonFLY}) then break;

======================================================

у меня возник вопрос
наткнулся на этап установки ssPreInstall
но кажется он не работает
в справке о нём ни слова (значит он одно из расширений)
выделил жирным в коде:
читать дальше »
Код: Выделить весь код
[Setup]
SourceDir=.
AppName=1
AppVerName=1
DefaultDirName={pf}\1


[code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
  case
    CurStep of
    ssPreInstall: MsgBox('Не работает?',mberror,MB_ok);
    ssInstall: MsgBox('начало учтановки',mberror,MB_ok);
    ssPostInstall: MsgBox('после установки',mberror,MB_ok);
    ssDone: MsgBox('после завершения работы инсталла',mberror,MB_ok);
  end;
end;


==================================================

а также улучшил код "фоновый рисунок в зависимости от разрешения" под свои нужнды
(блин, мои нужды - это один единственный инсталл)
было так:
читать дальше »
Код: Выделить весь код
[Setup] 
AppName=AppName 
AppVerName=AppVerName 
DefaultDirName={pf}\AppName 

[Files] 
Source: 640.bmp; DestDir: {tmp}; Flags: dontcopy 
Source: 800.bmp; DestDir: {tmp}; Flags: dontcopy 
Source: 1024.bmp; DestDir: {tmp}; Flags: dontcopy 
Source: 1152.bmp; DestDir: {tmp}; Flags: dontcopy 
Source: 1280.bmp; DestDir: {tmp}; Flags: dontcopy 
Source: 1600.bmp; DestDir: {tmp}; Flags: dontcopy 

[code]
function GetDC(HWND: DWord): DWord; 
external 'GetDC@user32.dll stdcall'; 

function GetDeviceCaps(DC: DWord; Index: Integer): Integer; 
external 'GetDeviceCaps@gdi32.dll stdcall'; 

function ReleaseDC(HWND: DWord;DC: DWord): Integer; 
external 'ReleaseDC@user32.dll stdcall'; 

function ShowWindow(hWnd: DWord; nCmdShow: Integer): boolean; 
external 'ShowWindow@user32.dll stdcall'; 

function SetWindowLong(hWnd: DWord; nIndex: Integer; dwNewLong: Longint): Longint; 
external 'SetWindowLongA@user32.dll stdcall'; 

procedure InitializeWizard(); 
var 
bgImage : TBitmapImage; 
bgImageName: String; 
width: integer; 
dc: DWord; 

begin 
bgImage:=TBitmapImage.Create(MainForm) 
bgImage.Align:=alClient 
bgImage.Stretch:=True 
bgImage.Parent:=MainForm 

dc:=GetDC(MainForm.Handle) 
width:=GetDeviceCaps(dc,8) 
ReleaseDC(MainForm.Handle,dc) 

if width <=640 then 
bgImageName:='640.bmp' 

else if width<=800 then 
bgImageName:='800.bmp' 

else if width<=1024 then 
bgImageName:='1024.bmp' 

else if width<=1152 then 
bgImageName:='1152.bmp' 

else if width<=1280 then 
bgImageName:='1280.bmp' 

else 
bgImageName:='1600.bmp' 

ExtractTemporaryFile(bgImageName) 
bgImage.bitmap.LoadFromFile(expandConstant('{tmp}\'+bgImageName)) 

SetWindowLong(MainForm.Handle,-16,$80000000) 
ShowWindow(Mainform.Handle,SW_SHOWMAXIMIZED) 
end;


недоработка кода выше это то что проверяется только ширина монитора
те при ширине на 16 9 = 1280 на 720 или 800(16 10) и при ширине 1280 на 1024(4 3)
будет одна и та же картинка
стало так:
читать дальше »
Код: Выделить весь код
[Setup] 
AppName=AppName 
AppVerName=AppVerName 
DefaultDirName={pf}\AppName 

[Files] 
Source: Backgr_Pic\169.bmp; Flags: dontcopy solidbreak nocompression  sortfilesbyextension
Source: Backgr_Pic\43.bmp; Flags: dontcopy solidbreak nocompression  sortfilesbyextension
Source: Backgr_Pic\1610.bmp; Flags: dontcopy solidbreak nocompression  sortfilesbyextension
Source: Backgr_Pic\finish.bmp; Flags: dontcopy solidbreak nocompression  sortfilesbyextension

[code] 
function GetDC(HWND: DWord): DWord; external 'GetDC@user32.dll stdcall';
function GetDeviceCaps(DC: DWord; Index: Integer): Integer; external 'GetDeviceCaps@gdi32.dll stdcall';
function ReleaseDC(HWND: DWord;DC: DWord): Integer; external 'ReleaseDC@user32.dll stdcall';
function ShowWindow(hWnd: DWord; nCmdShow: Integer): boolean; external 'ShowWindow@user32.dll stdcall';
function SetWindowLong(hWnd: DWord; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';

procedure InitializeWizard(); 
var 
  bgImage : TBitmapImage;
  bgImageName: String;
  Width, Height: integer;
  dc: DWord;

begin 
  dc := GetDC(MainForm.Handle);
  Width := GetDeviceCaps(dc,8);
  Height := GetDeviceCaps(dc,10);
  ReleaseDC(MainForm.Handle,dc);

  if ((Width = 1280) and (Height = 720)) or
     ((Width = 1366) and (Height = 768)) or
     ((Width = 1600) and (Height = 900)) or
     ((Width = 1920) and (Height = 1080)) or
     ((Width = 2560) and (Height = 1440))
  then bgImageName := '169.bmp'

  else

  if ((Width = 1024) and (Height = 768)) or
     ((Width = 1152) and (Height = 864)) or
     ((Width = 1280) and (Height = 900)) or
     ((Width = 1280) and (Height = 1024)) or
     ((Width = 1600) and (Height = 1200))
  then bgImageName := '43.bmp'

  else

  if ((Width = 1280) and (Height = 768)) or
     ((Width = 1280) and (Height = 800)) or
     ((Width = 1440) and (Height = 900)) or
     ((Width = 1600) and (Height = 1024)) or
     ((Width = 1680) and (Height = 1050))
  then bgImageName := '1610.bmp'

  else

  if ((Width > 1920) and (Height > 1080))
  then bgImageName := 'finish.bmp'

  bgImage:=TBitmapImage.Create(MainForm)
  with bgImage do
  begin
    Align := alClient;
    Stretch := True;
    Parent:=MainForm;
    ExtractTemporaryFile(bgImageName);
    Bitmap.LoadFromFile(expandConstant('{tmp}\'+ bgImageName))
  end;

  SetWindowLong(MainForm.Handle,-16,$80000000)
  ShowWindow(Mainform.Handle,SW_SHOWMAXIMIZED)
end;

скорость обработки (4 if) высокая и точность
пользуйтесь кто хочет (выдрал у себя из кода)!
finish.bmp это если разрешение выше так называемого фулл хд
сделан учётом далёкого будущего
разрешение картинки 3840 на 2160

Последний раз редактировалось Johny777, 25-07-2012 в 13:29.

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

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


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


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

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


Люди, может кто-то сталкивался. Проблема очень неприятная, для меня, во всяком случае. Инсталл, который я пишу использует InnoSetupForms, поля в них инициализируются 2 вариантами: если программа не была установлена - то по умолчанию, если была - то с конфигурационного файла. По завершении установки конфигурационный файл перезаписывается значениями из полей форм.
Теперь вопрос: как сделать возможность проверки на наличие программы и, если она есть, скрыть дополнительные формы(но при этом чтобы конфиг файл не пострадал при перезаписи)

Отправлено: 14:37, 25-07-2012 | #469


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


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

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


И еще, как выщемить название страницы(или ее ID) на которой предлагается создать ярлыки для текущего и для всех пользователей. Заранее спасибо

Отправлено: 17:52, 25-07-2012 | #470



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59
Inno Setup tradeukraine Вебмастеру 3 13-06-2006 20:39




 
Переход