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

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

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

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

Ветеран


Contributor


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


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

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


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

Отправлено: 19:06, 28-03-2013

 

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


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

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


El Sanchez, спасибо!
А вот еще вопрос. Если в инсталляторе на странице выбора доп. задач есть чекбоксы для создания нескольких ярлыков на рабочем столе, то можно кроме них сделать чекбокс "выставить все" и, если можно, то как? Т е можно ли как-то программно выставлять чекбокс таска на странице wpSelectTasks?

Отправлено: 13:07, 16-10-2013 | #1271



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

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


Аватара для nik1967

Старожил


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

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


Shkutu,
может так проще?
Код: Выделить весь код
[setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
OutputDir=.

[Tasks]
Name: desktopicon; Description: Выставить все; GroupDescription: Создать ярлыки:
Name: desktopicon\di1; Description: 1 ярлык; Flags: unchecked
Name: desktopicon\di2; Description: 2 ярлык; Flags: unchecked
Name: desktopicon\di3; Description: 3 ярлык; Flags: unchecked

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

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

Отправлено: 13:43, 16-10-2013 | #1272


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


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

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


nik1967, это не совсем то, насколько я поняла. GroupDescription просто позволяет объединить несколько задач в группу. В прошлый раз я наверное не совсем корректно задала вопрос. Смысл в том, что если, допустим, у меня есть 10 чек боксов для создания 10 ярлыков, то хотелось бы иметь еще 1 чек бокс "выставить все", после выставления которого остальные 10 автоматически станут выставлены (ну просто чтобы можно было кликнуть 1 раз вместо 10 )
И еще вопрос. Можно ли на странице выбора компонентов эти самые компоненты разделить на группы, ну или выводить какой-нибудь текст между перечислением этих самых компонентов на странице wpSelectComponents. Т е как раз что-то вроде GroupDescription, но для компонентов?

Отправлено: 14:36, 16-10-2013 | #1273


Аватара для nik1967

Старожил


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

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


Shkutu, а попробовать скомпилировать пример и посмотреть - не?
Цитата Shkutu:
Смысл в том, что если, допустим, у меня есть 10 чек боксов для создания 10 ярлыков, то хотелось бы иметь еще 1 чек бокс "выставить все", после выставления которого остальные 10 автоматически станут выставлены (ну просто чтобы можно было кликнуть 1 раз вместо 10 ) »
Вот как раз это и происходит в данном примере, но без заморочек с секцией [ code]. А GroupDescription если не нужен, можно и не использовать.

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


Отправлено: 14:42, 16-10-2013 | #1274


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


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

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


nik1967, пробовать-то пробовала, но изначально читала невнимательно, так что сразу не поняла, как оно работает, извините. Да, действительно, это как раз то, что нужно.

Отправлено: 15:13, 16-10-2013 | #1275


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


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

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


Цитата nik1967:
Можно
читать дальше »
Код: Выделить весь код
Код:
[setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}
OutputDir=.
VersionInfoVersion=1.0.0.3
[ code]
function FileVersion(FilePath:string):string; // версия файла
var
 oFS: Variant;
begin
 oFS := CreateOleObject('Scripting.FileSystemObject');
 Result := oFS.GetFileVersion(FilePath);
end;
procedure InitializeWizard();
begin
 if FileExists(ExpandConstant('{src}\setup.exe')) then
 MsgBox(FileVersion(ExpandConstant('{src}\setup.exe')), mbInformation, MB_OK);
end; »
Так.. что-то я не догнал... а в каком тут месте проверяется версия файла? И как сделать так, чтобы сообщение о неверной версии проверяемого файла выскакивало при нажатии кнопки кнопки далее... ну как тут:
читать дальше »
Код: Выделить весь код
///////////ПРОВЕРЯЕМ ПРАВИЛЬНОСТЬ ДИРЕКТОРИИ/////////////////////
function NextButtonClick(CurPageID: Integer): Boolean;
begin
    Result := True;

    case CurPageID of
        wpSelectDir:
        begin
            Result := FileExists(ExpandConstant('{app}')+'\GameName.exe');
            if not Result then MsgBoxEx(WizardForm.Handle, 'По данному пути игра не найдена! Еще раз проверьте путь установки!', 'Неверно указан путь к игре', MB_OK or MB_ICONWARNING, 0, 0);
        end;
    end;
  end;
////////////////////////////////////////////////////////////////////

Отправлено: 17:24, 16-10-2013 | #1276


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


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

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


Всем хай ребят выручайте что с этой ошибкой делать

Отправлено: 23:36, 16-10-2013 | #1277


Аватара для nik1967

Старожил


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

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


APTEM2, удалить повторный идентификатор 'CancelBtn'
Mat_y, если не забуду, завтра пример набросаю.

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

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

Отправлено: 23:53, 16-10-2013 | #1278


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


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

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


nik1967,
Ещё вопрос как в свой инстолятор добавить слайд шоу ?????????

Отправлено: 00:05, 17-10-2013 | #1279


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


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

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


APTEM2, кнопка Cancel у Вас 2 раза прописана в коде.
Цитата APTEM2:
Ещё вопрос как в свой инстолятор добавить слайд шоу ????????? »
Слайдшоу по процентам установки (из справки)
читать дальше »
Код: Выделить весь код
[Setup] 
AppName=My Program 
AppVerName=My Program 
CreateAppDir=No 
WindowVisible=Yes

[Files] 
Source: innocallback.dll; DestDir: {tmp}; Flags: dontcopy 
Source: pic1.bmp; DestDir: {tmp}; Flags: dontcopy 
Source: pic2.bmp; DestDir: {tmp}; Flags: dontcopy 
Source: pic3.bmp; DestDir: {tmp}; Flags: dontcopy

[Code 
type 
TProc=procedure(HandleW, msg, idEvent, TimeSys: LongWord); 
var 
BackgroundBitmapImage: TBitmapImage; 
TimerID: LongWord;

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 GetSystemMetrics(nIndex:Integer):Integer; 
external 'GetSystemMetrics@user32.dll stdcall';

procedure InitializeWizard(); 
begin 
ExtractTemporaryFile('pic1.bmp') 
ExtractTemporaryFile('pic2.bmp') 
ExtractTemporaryFile('pic3.bmp') 
end;

function PercentProgress(): Integer; 
begin 
with WizardForm.ProgressGauge do begin 
Result:=(Position-Min)/((Max - Min)/100) 
end 
end;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord); 
var 
percent: integer; 
begin 
percent:=PercentProgress 
with BackgroundBitmapImage do begin 
if ((percent>0) and (percent<33) and (Tag<>1)) then begin 
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\pic1.bmp') 
Tag:=1 
end else 
if ((percent>34) and (percent<66) and (Tag<>2)) then begin 
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\pic2.bmp') 
Tag:=2 
end else 
if ((percent>67) and (percent<100) and (Tag<>3)) then begin 
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\pic3.bmp') 
Tag:=3 
end 
end 
end;

procedure CurPageChanged(CurPageID: Integer); 
var 
pfunc: LongWord; 
Width, Height: Integer; 
begin 
If CurPageID=wpInstalling 
then 
begin 
pfunc:=WrapTimerProc(@OnTimer, 4) 
TimerID:=SetTimer(0, 0, 500, pfunc) 
BackgroundBitmapImage:=TBitmapImage.Create(MainForm) 
with BackgroundBitmapImage do begin 
BackColor:=clBlack 
Center:=True 
Align:=alClient 
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\pic1.bmp') 
Parent:=MainForm 
Tag:=1 
end 
end 
if CurPageID=wpFinished 
then 
begin 
BackgroundBitmapImage.Hide 
end 
end;

procedure DeinitializeSetup(); 
begin 
KillTimer(0, TimerID) 
end;


Полноэкранный рисунок на фоновом окне и полноэкранное слайд-шоу по процентам (из справки):
читать дальше »
Код: Выделить весь код
[Setup] 
AppName=My Program 
AppVerName=My Program 
DefaultDirName=My Program 
BackColor=0

[Files] 
Source: InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy 
Source: BackImage.bmp; DestDir: {tmp}; Flags: dontcopy 
Source: 1.bmp; DestDir: {tmp}; Flags: dontcopy 
Source: 2.bmp; DestDir: {tmp}; Flags: dontcopy 
Source: 3.bmp; DestDir: {tmp}; Flags: dontcopy

[Code 
type 
TProc=procedure(HandleW, msg, idEvent, TimeSys: LongWord); 
var 
BackImage, SlideImage: TBitmapImage; 
TimerID: LongWord; 
s:string; 
Width, Height:Integer;

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 GetSystemMetrics(nIndex:Integer):Integer; 
external 'GetSystemMetrics@user32.dll stdcall';

procedure InitializeWizard(); 
begin 
WizardForm.Position:=poScreenCenter 
Width:=GetSystemMetrics(0) 
Height:=GetSystemMetrics(1) 
MainForm.BORDERSTYLE:=bsNone 
MainForm.Left:=0 
MainForm.Top:=0 
MainForm.Width:=Width 
MainForm.Height:=Height 
ExtractTemporaryFile('BackImage.bmp') 
s:=ExpandConstant('{tmp}')+'\BackImage.bmp ' 
BackImage:=TBitmapImage.Create(MainForm) 
BackImage.Bitmap.LoadFromFile(s) 
BackImage.Align:=alClient 
BackImage.Parent:=MainForm 
BackImage.Stretch:=True 
MainForm.Visible:=True

ExtractTemporaryFile('BackImage.bmp') 
ExtractTemporaryFile('1.bmp') 
ExtractTemporaryFile('2.bmp') 
ExtractTemporaryFile('3.bmp') 
end;

function PercentProgress(): Integer; 
begin 
with WizardForm.ProgressGauge do begin 
Result:=(Position-Min)/((Max - Min)/100) 
end 
end;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord); 
var 
percent: integer; 
begin 
percent:=PercentProgress 
with SlideImage do begin 
if ((percent>0) and (percent<10) and (Tag<>1)) then begin 
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\1.bmp') 
Tag:=1 
end else 
if ((percent>11) and (percent<20) and (Tag<>2)) then begin 
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\2.bmp') 
Tag:=2 
end else 
if ((percent>21) and (percent<100) and (Tag<>3)) then begin 
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\3.bmp') 
Tag:=3 
end 
end 
end;

procedure CurPageChanged(CurPageID: Integer); 
var 
pfunc: LongWord; 
Width, Height: Integer; 
begin 
If CurPageID=wpInstalling 
then 
begin 
pfunc:=WrapTimerProc(@OnTimer, 4) 
TimerID:=SetTimer(0, 0, 500, pfunc) 
SlideImage:=TBitmapImage.Create(MainForm) 
with SlideImage do begin 
Stretch:=True 
Align:=alClient 
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\1.bmp') 
Parent:=MainForm 
Tag:=1 
end 
end 
if CurPageID=wpFinished 
then 
begin 
SlideImage.Hide 
end 
end;

procedure DeinitializeSetup(); 
begin 
KillTimer(0, TimerID) 
end;


Inno Setup Faq. Слайд-шоу в окне инсталляции
читать дальше »
Код: Выделить весь код
#define TIME_FOR_VIEW 10

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program

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

[Files]
Source: InnoCallback.dll; Flags: dontcopy noencryption nocompression solidbreak;
Source: .bmp; Flags: dontcopy noencryption nocompression solidbreak;

Source: D:\Games\StarCraft enGB\StarDat.mpq; DestDir: {app}

[Code
const
n=21; ///количество слайдов
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
TRandNumbers = array[1..N] of byte;

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 get_unique_r andom_number(X:byte):TRandNumbers;
var
A,b,c: string;
i,j,k:byte;
begin
For i:=1 to X do A:=A+chr(i);
B:='';
For i:=1 to X do begin
  j:=Random(Length(A)-1)+1;
  C:='';
  B:=B + A[j];
  for k:=1 to Length(A) do
  if k<>j then C:=C+A[k];
  A:=C;
end;
for i:=1 to X do Result[i]:=ord(B[i]);
end;

var
TimerID: LongWord;
currTime: Integer;
SplashImage: TBitmapImage;
StatusMessages: TNewStaticText;
bmp: TRandNumbers;
z:byte;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
currTime := currTime + 1;
if (currTime mod {#TIME_FOR_VIEW} = 0)
then begin
  SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+ inttostr(bmp[currTime/{#TIME_FOR_VIEW}])+'.bmp'));
  if (currTime/{#TIME_FOR_VIEW} = N) then currTime:=0;
end;
end;

procedure InitializeWizard;
begin
bmp:=get_unique_random_number(N);
ExtractTemporaryFile('Image_'+inttostr(bmp[1])+'.bmp');

currTime := 0;

WizardForm.ProgressGauge.Parent := WizardForm;
WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + ScaleY (12);
WizardForm.ProgressGauge.Left := ScaleX(10);
WizardForm.ProgressGauge.Width := WizardForm.MainPanel.Width - ScaleX(20);
WizardForm.ProgressGauge.Height := 16;
WizardForm.ProgressGauge.Hide;

WizardForm.StatusLabel.Parent := WizardForm;
WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);
WizardForm.StatusLabel.Left := ScaleX(10);
WizardForm.StatusLabel.Width := ScaleX(397);
WizardForm.StatusLabel.Hide;

SplashImage := TBitmapImage.Create(WizardForm);
SplashImage.Top := 0;
SplashImage.Left := 0;
SplashImage.Width := WizardForm.MainPanel.Width;
SplashImage.Height := WizardForm.Bevel.Top;
SplashImage.Parent := WizardForm.InnerPage;
SplashImage.Stretch := True;
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[1])+'.bmp'));
SplashImage.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
WizardForm.StatusLabel.Caption := 'Распаковка слайдов ...';
for z:=2 to N do ExtractTemporaryFile('Image_ '+inttostr(bmp[z])+'.bmp');
end;
end;

procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;
begin
if (CurPageID = wpInstalling) then
begin
pfunc := WrapTimerProc(@OnTimer, 5);
TimerID := SetTimer(0, 0, 1000, pfunc);
WizardForm.PageNameLabel.Visible := False;
WizardForm.PageNameLabel.Visible := False;
WizardForm.InnerNotebook.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.ProgressGauge.Show;
WizardForm.StatusLabel.Show;
SplashImage.Show;
WizardForm.CancelButton.Enabled := True;
WizardForm.CancelButton.Top := WizardForm< /FONT> .Bevel.Top + ScaleY(100);
end else
begin
WizardForm.ProgressGauge.Hide;
SplashImage.Hide;
WizardForm.FileNameLabel.Hide;
WizardForm.StatusLabel.Hide;
if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
begin
WizardForm.InnerNotebook.Show;
WizardForm.Bevel1.Show;
WizardForm.MainPanel.Show;
WizardForm.PageNameLabel.Show;
WizardForm.PageNameLabel.Show;
end;
If CurPageID = wpFinished then
end;
end;

procedure DeInitializeSetup();
begin
KillTimer(0, TimerID);
end;


nik1967, напоминаю о своей проблеме.

Последний раз редактировалось Mat_y, 17-10-2013 в 08:58.


Отправлено: 08:52, 17-10-2013 | #1280



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 5] El Sanchez Автоматическая установка приложений 1999 28-03-2013 19:09
Скрипты 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




 
Переход