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

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

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

Ветеран


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


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

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


Изменения
Автор: jameszero
Дата: 08-11-2010
Описание: тема закрыта
Лимит страниц.
Тема закрыта.
Продолжение по ссылке Скрипты Inno Setup. Помощь и советы [часть 3]




Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;
    Предыдущая версия: 5.3.0 [07.04.2009] - Скачать (зеркало) | Русификатор (зеркало);

  • Inno Script Generator - ещё один редактор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать;

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы. Официальный сайт - недоступен.
    Последняя версия: 2.0.8 [12.11.2006] - Страница с зеркалами;

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • InnoSetup Script Joiner - Программа для объединения нескольких скриптов InnoSetup в один;

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.3 [11.09.2009] - Скачать;


Ссылка на архив предыдущей темы (также можно скачать из вложения)

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.


Отправлено: 22:06, 23-08-2009

 

Ветеран


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

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


Цитата Merlin_jr:
Так дело в том, что этот самый текст неизвестен и соответственно предложенный вариант не совсем подходит. »
Ну так переделайте функцию ReadFileName как вам надо, я только привёл пример загрузки текстового файла с дальнейшей его обработкой.
Вы точно уверены, что требуемуе значение будет первой строкой? Если да, то:
Пример
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
function ReadFirstLine(const FileName: string): string;
var
  S: array of string;
begin
  Result:= '';
  if LoadStringsFromFile(FileName, S) then Result:= S[0]; // первая строка
end;

function InitializeSetup(): Boolean;
begin
  MsgBox(ReadFirstLine(ExpandConstant('{pf}\Inno Setup 5\Examples\Readme.txt')), mbInformation, MB_OK);
end;


Цитата beaverBox:
монолог какой-то получается »
Естественно, днём все на работе.

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.


Отправлено: 16:15, 18-02-2010 | #1301



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

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


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


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

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


Сам и отвечу тогда, раз уж так повелось

Код: Выделить весь код
procedure InitializeWizard;
begin
  WizardForm.PasswordEdit.Text := 'blabla';
  ...
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  If CurPageID = wpPassword then begin
    SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
    SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
  end;
end;
и добавить флаг noencryption к файлам в секции [Files].

Отправлено: 16:42, 18-02-2010 | #1302


Ветеран


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

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


Цитата beaverBox:
Сам и отвечу тогда, раз уж так повелось »
Так вы и не спрашивали, из вашего предыдущего сообщения было понятно, что вы разобрались...
Цитата beaverBox:
Нашел решение: »
Цитата beaverBox:
и добавить флаг noencryption к файлам в секции [Files] »
Только к тем, которые вы извлекаете с помощью ExtractTemporaryFile.
Ну а нажать на кнопку Далее, можно и проще:
Код: Выделить весь код
//////////////////////////////////////////////////////////////////////////////
  if CurPageID = wpPassword then
    WizardForm.NextButton.OnClick(WizardForm.NextButton);
/////////////////////////////////////////////////////////////////////////////

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.


Отправлено: 19:09, 18-02-2010 | #1303


Аватара для semiono

Ветеран


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

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


Нужно найти файл:
Варианты: (чем больше тем лучше - [имя]**.exe)
{pf}\папка с_пробелом\Cubase.exe
{pf}\папка с_пробелом\Cubase4.exe
{pf}\папка с_пробелом\Cubase 4.exe
{pf}\папка с_пробелом\Nuendo.exe
{pf}\папка с_пробелом\Nuendo4.exe
{pf}\папка с_пробелом\Nuendo 4.exe

и дополнительно:
{sys}\Cubase.cmd ; здесь имя без вариантов ; файл может вообще отсутствовать
{sys}\Nuendo.cmd ; здесь имя без вариантов ; тоже самое

и запустить первый файл который существует, затем сразу выйти и завершить поиск.
В случае error просто завершить поиск итд...
Другими словами, надо запустить одно из двух приложений которые не точно известны инсталлеру.
Выполнить я имею ввиду так -
[Run]
FileName: {Code:Result}; Flag: Nowait

{pf}\папка с_пробелом\ -- другими словами --> {pf}\*\*\*... рекурсивно

тема перекликается с автоит разделом где это уже было решённым, но я не сразу подумал что мне это в iss более нужно,
тем более что и API здесь вроде бы подходящие имеются, но сам я не потяну


Если есть какие-то сложности, зделайте хотябы упрощённый вариант по выбору
или {pf}\папка с_пробелом\Cubase.exe
или {pf}\папка с_пробелом\Nuendo.exe

-------
Полезное сообщение


Последний раз редактировалось semiono, 18-02-2010 в 19:41.


Отправлено: 19:24, 18-02-2010 | #1304


Аватара для A1EXXX

Старожил


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

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


Inno Setup 5.3.8

(changelog)



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

Отправлено: 19:52, 18-02-2010 | #1305


Старожил


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

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


Serega, ты не подскажеш как на второй процесбар наложить текстуру
Вот код
читать дальше »
[Setup]
AppName=zz
DefaultGroupName=group
AppVerName=zzz
DefaultDirName={pf}\test
SolidCompression=false
InternalCompressLevel=none
Compression=none

#define PB_ImageFile "progress1.bmp"

[Files]
Source: IMAGE\{#PB_ImageFile}; DestDir: {tmp}; Flags: recursesubdirs ignoreversion
Source: Files\packjpg_dll.dll; DestDir: {sys}; Flags: deleteafterinstall
Source: Files\precomp.dll; DestDir: {sys}; Flags: deleteafterinstall
Source: Files\zlib1.dll; DestDir: {sys}; Flags: deleteafterinstall
Source: Files\innocallback.dll; Flags: dontcopy
Source: Files\isprecomp.dll; Flags: dontcopy
Source: animations2.pcf; DestDir: {tmp}; Flags: ignoreversion nocompression


[code]
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
TPrecompCallback = procedure(progress: integer);
TMessage = record hWnd: HWND; msg, wParam: Word; lParam: LongWord; Time: TFileTime; pt: TPoint; end;

var
TimerID: LongWord;
intOldCurrWidth : Integer;
ProgressBar_BitmapImage: TBitmapImage;
ProgressBar_Edit : TEdit;
ProgressBar_ImageHeight : integer;
ProgressLabel: TLabel;
ProgressBar: TNewProgressBar;
btnCancelRecompress: TButton;

// Функции для работы с таймером
function WrapTimerProc(callback:TProc; paramcount:integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';

function PeekMessage(var lpMsg: TMessage; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMessage): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMessage): Longint; external 'DispatchMessageA@user32.dll stdcall';

function WrapPrecompCallback(callback:TPrecompCallback; paramcount:integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
procedure PrecompExtract(in_file, extract_path: PAnsiChar; callback: longword); external 'precomp_extract@files:isprecomp.dll,precomp.dll,zlib1.dll,packjpg_dll.dll stdcall';
procedure PrecompBreak; external 'precomp_break@files:isprecomp.dll stdcall delayload';

procedure AppProcessMessage;
var
Msg: TMessage;
begin
if not PeekMessage(Msg, {WizardForm.Handle} 0, 0, 0, {PM_REMOVE} 1) then Exit;
TranslateMessage(Msg); DispatchMessage(Msg);
end;

// эта процедура будет вызыватся 100 раз в секунду
procedure PrecompCallback(progress: integer);
begin
ProgressBar.Position := progress;
ProgressLabel.Caption := 'Recompression: ' + IntToStr(progress) + '%';
AppProcessMessage;
end;

procedure btnCancelRecompressOnClick(Sender: TObject);
begin
PrecompBreak;
WizardForm.FinishedHeadingLabel.Caption:= 'Setup aborted';
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted);
end;

// Обработчик нажатия кнопки Отмена
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
if CurPageID = wpInstalling then // Просто спрячем наш Прогресс Бар
ProgressBar_Edit.Show;
end;

// Функция вызываемая по таймеру
procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
CurrWidth : single;
begin
// Используем текущее состояние стандартного Прогресс Бара (ПБ)
with WizardForm.ProgressGauge do
begin
CurrWidth := ( Position * Width ) / Max; // Вычисляем какой ширины должен быть наш ПБ
if intOldCurrWidth <> Round( CurrWidth ) then // Если ширина пока что такая же, то не будем пока что рисовать, чтобы избежать лишних обновлений формы
begin
intOldCurrWidth := Round( CurrWidth );
// Теперича "рисуем" наш ПБ
ProgressBar_BitmapImage.SetBounds( 0, 0, intOldCurrWidth, ProgressBar_ImageHeight );
ProgressBar_BitmapImage.Show(); // Показываем его во всей красе
end;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;
begin
if CurPageID = wpInstalling then
begin
// Устанавливаем таймер
pfunc := WrapTimerProc( @OnTimer, 4 );
TimerID := SetTimer( 0, 0, 100, pfunc );
intOldCurrWidth := 0;
end;

// Убираем таймер, когда находимся на последней странице.
if CurPageID = wpFinished then
KillTimer( 0, TimerID );
end;

Procedure InitializeWizard1;
begin
// Создаем наш Edit, чтобы у нашего ПБ была более-менее нормальная рамка.
ProgressBar_Edit := TEdit.Create( WizardForm );
with ProgressBar_Edit do
begin
// Создаем его на месте стандартного ПБ
Left := WizardForm.ProgressGauge.Left;
Top := WizardForm.ProgressGauge.Top;
Width := WizardForm.ProgressGauge.Width;
Height := WizardForm.ProgressGauge.Height;
Enabled := False;
ReadOnly := True;
// Фоновый цвет делаем точно такой же как у формы.
Color := WizardForm.Color;
Parent := WizardForm.InstallingPage;
end;

// Распаковываем картинку для нашего ПБ
ExtractTemporaryFile( '{#PB_ImageFile}' );

ProgressBar_BitmapImage := TBitmapImage.Create( WizardForm );
with ProgressBar_BitmapImage do
begin
// Загружаем картинку
Bitmap.LoadFromFile( ExpandConstant( '{tmp}\' ) + '{#PB_ImageFile}' );
Parent := ProgressBar_Edit;
Stretch := True; // Он должен растягиваться
Hide; // Прячем его до поры до времени
end;

// Получаем высоту для картинки
ProgressBar_ImageHeight := ProgressBar_Edit.Height - 2;
// Прячем стандартный ПБ
WizardForm.ProgressGauge.Hide;
end;

procedure DeinitializeSetup();
begin
// Убираем таймер
KillTimer( 0, TimerID );
end;



procedure InitializeWizard2;
begin
ProgressBar := TNewProgressBar.Create(WizardForm);
with ProgressBar do begin
Left := WizardForm.ProgressGauge.Left;
Top := WizardForm.ProgressGauge.Top + ScaleX(30);
Width := WizardForm.ProgressGauge.Width;
Height := WizardForm.ProgressGauge.Height;
Parent := WizardForm.InstallingPage;
Min := 0;
Max := 100;
Position := 0;
Hide;
end;
ProgressLabel := TLabel.Create(WizardForm);
with ProgressLabel do begin
Left := ProgressBar.Left;
Top := ProgressBar.Top + ProgressBar.Height + ScaleX(5);
AutoSize:= True;
Caption:= 'Recompression: 0%';
Parent := WizardForm.InstallingPage;
Transparent:= True;
Hide;
end;
btnCancelRecompress:=TButton.create(WizardForm);
with btnCancelRecompress do begin
SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
OnClick:= @btnCancelRecompressOnClick;
Parent := WizardForm;
Hide;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
callback: longword;
begin
if CurStep = ssPostInstall then
begin
ProgressBar.Show;
ProgressLabel.Show;
btnCancelRecompress.Caption := WizardForm.CancelButton.Caption;
btnCancelRecompress.Show;
callback:=WrapPrecompCallback(@PrecompCallback,1);
PrecompExtract(ExpandConstant('{tmp}\animations2.PCF'), ExpandConstant('{app}'), Callback);
btnCancelRecompress.Hide;
end;
end;

Procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
end;

Отправлено: 21:02, 18-02-2010 | #1306


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


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

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


Цитата Serega:
Так вы и не спрашивали, из вашего предыдущего сообщения было понятно, что вы разобрались... »
Я не волшебник, я только учусь(с)
Спасибо.

Цитата Serega:
Ну а нажать на кнопку Далее, можно и проще: »
Я поступил еще проще. У меня есть function ShouldSkipPage(PageID: Integer): Boolean;, туда и сунул
Код: Выделить весь код
  if PageID = wpPassword then
    Result := true;

Отправлено: 11:19, 19-02-2010 | #1307


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


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

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


Вопрос:
Как в скрипте распаковки FreeArc сделать чтобы он распаковывал более одного архива.
Вот сам код:
Код: Выделить весь код
;строки распаковки архивов
Source: {src}\data.arc; DestDir: {app}\data; Flags: external dontcopy
Source: {src}\bin.arc; DestDir: {app}\bin; Flags: external dontcopy
{#SourceToProgress}
Но при этом коде распаковывается только bin.arc а data.arc НЕ распаковывается.
Как сделать чтобы и тот и тот распаковывались ?

И еще, подскажите где взять скрипт вот такого инсталлера:


Заранее большое спасибо.

Отправлено: 21:35, 19-02-2010 | #1308


Ветеран


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

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


D_Rix,
Цитата D_Rix:
чтобы он распаковывал более одного архива. »
Код: Выделить весь код
;строки распаковки архивов
Source: {src}\data.arc; DestDir: {app}\data; Flags: external dontcopy
{#SourceToProgress}
Source: {src}\bin.arc; DestDir: {app}\bin; Flags: external dontcopy
{#SourceToProgress}
или в секции код:
Код: Выделить весь код
const  
Archives = '{src}\*.arc';

Отправлено: 03:54, 20-02-2010 | #1309


Аватара для YURSHAT

Старожил


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

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


Цитата D_Rix:
И еще, подскажите где взять скрипт вот такого инсталлера: »
Здесь

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


Отправлено: 04:01, 20-02-2010 | #1310



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Inno Setup .:[все вопросы]:. Mchik Автоматическая установка приложений 1329 23-08-2009 20:13
[архив - Часть 2] AutoIt скрипты Vadikan AutoIt 985 21-01-2008 09:58
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход