Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: Genri
Дата сообщения: 03.03.2012 00:58
Alexan

Цитата:
я бы хотел делать проверку в момент когда пользователь сделал выбор папки по кнопке "Обзор..."
-- реализовать проверку можно. Но смысла в этом нет. Упрямый пользователь возьмет и вообще не будет нажимать кнопку "Обзор", а введет путь вручную с клавиатуры
Укажи более конкретно - что именно и для чего собираешься анализировать (валидность пути, системный диск, корень диска и т.д.). Тогда кто-нибудь да поможет. А возможно, что то что тебе требуется, можно получить указанием одной опции.
Автор: nik1967
Дата сообщения: 03.03.2012 05:51
AntonOVS
Цитата:
Зайдя в папку игры я вижу тот самый компонент, который, как уже писал выше, я не выбирал.

Читайте же внимательно справки! Небось такое при тестовом прогоне? Из справки ISDone:
"Прогрессбар будет зашкаливать и все компоненты будут извлечены вне зависимости от того выбраны они, или нет. Все так и должно быть!"

Автор: Sergey_Demchuk
Дата сообщения: 03.03.2012 08:56
Нету ли у кого примера скрипта, который бы проверял наличие уже установленной программы и выдавал при старте окно наподобие как у MSI инсталлятора, с возможностью Изменить-Удалить-Переустановить программу?
Автор: AntonOVS
Дата сообщения: 03.03.2012 10:41
nik1967
Согласен, не внимателен я... После тесового прогона задействовал records.inf, все исправилось, спасибо!
Но вот как такое реализовать:

Цитата:
И еще один вопрос: как сделать так, чтобы при отсутствии файла компонента, страница с выбором компонентов в инсталляторе не появлялась ? То есть если бы отсутствовал, архив с компонентом, то этой бы страницы:
http://i29.fastpic.ru/big/2012/0302/d5/dab0dee0db4eaeba7f88eb8ba2af97d5.jpg
не было. Заранее спасибо...
Автор: R3Pa4eK
Дата сообщения: 03.03.2012 10:44
Sergey_Demchuk
Можно сделать проверку через реестр. Если в нем найдена определённая ветка, изменять страницу приветствия, подменять кнопки и т.п. Можно по наличию файла. При первом запуске создавать где то в папке Windows\system32 какой то файл, при втором запуске проверять его наличие с помошью функции FileExists, если найден - делаем тоже самое, заменяем содержимое страницы приветствия и пр.
Автор: Nasgul1987
Дата сообщения: 03.03.2012 13:59
AntonOVS
очень просто

[Components]
Name: main; Description: компонент 1; Check: IsComponent1; Types: full custom;

[_Code]
function IsComponent1:boolean;
var
sz:Integer;
s:string;
begin
Result:=True;
begin
If (FileSearch('proga.exe', ExpandConstant('{src}\main'))='') then
Result:=False
end;
end
Автор: R3Pa4eK
Дата сообщения: 03.03.2012 14:19
AntonOVS
Еще проще:
[ Code]
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = wpSelectComponents) and (not FileExists(ExpandConstant('{src}\main\proga.exe'))) then Result:= true;
end;
Автор: AntonOVS
Дата сообщения: 03.03.2012 15:09
Nasgul1987 твой способ имеет более большой объем, поэтому я взял более попроще способ R3Pa4eK, но все равно тому и тому спасибо и респект за труды!

Автор: Nasgul1987
Дата сообщения: 03.03.2012 15:33
скажите пожалуйста
есть ли способ хоть как-то отобразить инициализацию инсталлятора? (по возможности в прогресбаре пусть даже не настоящем, а ползущему по таймеру на 3 секунды)
у меня много файлов темп идёт

AntonOVS
ну примеры разные
у меня пропускает сам компонент
у R3Pa4eK пропускает страницу
сохрани себе оба
пригодятся
Автор: AntonOVS
Дата сообщения: 03.03.2012 15:55
Nasgul1987 спасибо за совет, так и сделаю.
Автор: meekrab
Дата сообщения: 04.03.2012 05:28
Nasgul1987
del
Автор: nik1967
Дата сообщения: 04.03.2012 06:54
Nasgul1987
[more=Пример 1]
Код: [Setup]
AppName=Example.Mini.Progress.Bar
AppVerName=Example.Mini.Progress.Bar 1.5
DefaultDirName={pf}\Example.Mini.Progress.Bar
OutputBaseFilename=mini.progress.bar.by.genri
WindowVisible=no

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

[Files]
Source: compiler:WizModernSmallImage.bmp; Flags: dontcopy nocompression

[_Code]
function GetSystemMetrics(nIndex: Integer): Integer; external 'GetSystemMetrics@user32.dll stdcall';

procedure InitializeWizard();
var
Form: TSetupForm;
ProgressBar: TNewProgressBar;
CancelButton: TButton;
StaticText: TNewStaticText;
BitmapImage: TBitmapImage;
BitmapFileName: string;
i: Integer;
begin
Form := CreateCustomForm();
try
with Form do
begin
ClientWidth := ScaleX(375); //Ширина формы для ProgressBar
ClientHeight := ScaleY(120); //Высота формы для ProgressBar
BorderStyle := bsDialog;
Left := GetSystemMetrics(16) - ClientWidth - ScaleX(5);
Top := GetSystemMetrics(17) - ClientHeight - ScaleY(5);
Caption := 'Inno Setup Wizard' //Заголовок мини ProgressBar'a
end;

BitmapFileName := ExpandConstant('{tmp}\WizModernSmallImage.bmp');
ExtractTemporaryFile(ExtractFileName(BitmapFileName));
BitmapImage := TBitmapImage.Create(Form);
BitmapImage.Left := ScaleX(8);
BitmapImage.Top := ScaleY(8);
BitmapImage.Width := ScaleX(58);
BitmapImage.Height := ScaleY(58);
BitmapImage.Bitmap.LoadFromFile(BitmapFileName);
BitmapImage.Parent := Form;

StaticText := TNewStaticText.Create(Form);
StaticText.Top := BitmapImage.Top;
StaticText.Left := BitmapImage.Left + BitmapImage.Width + ScaleX(8)
StaticText.Caption := 'Идет подготовка к установке S.T.A.L.K.E.R.: Shadow Of' + #10#13 + 'Chernobyl' + #10#13#10 + 'Пожалуйста подождите...'; //Текст самого мини ProgressBar'a
StaticText.AutoSize := True;
StaticText.Parent := Form;

CancelButton := TButton.Create(Form);
CancelButton.Parent := Form;
CancelButton.Width := ScaleX(75);
CancelButton.Height := ScaleY(23);
CancelButton.Left := Form.ClientWidth - ScaleX(75 + 10);
CancelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
CancelButton.Caption := 'Cancel';
CancelButton.ModalResult := mrCancel;
CancelButton.Cancel := True;

ProgressBar := TNewProgressBar.Create(Form);
with ProgressBar do
begin
Height := CancelButton.Height - ScaleY(8);
Width := Form.Width - ScaleX(128);
Top := CancelButton.Top;
Left := BitmapImage.Left;
Parent := Form;
Min := 0;
Max := 30;
Position := 0;
end;
Form.ActiveControl := CancelButton;
Form.Show();
for i := 0 to 30 do
begin
ProgressBar.Position := i;
Form.Repaint;
Sleep(500);
i := i + 1;
end;
finally
Form.Free();
end;
end;
Автор: Hell_Dog2011
Дата сообщения: 04.03.2012 11:34
При создании репака всё готова начинаешь устанавливать, доходит до 100% и идёт почемуто удаление вчём может быть причина? делал по шаблону скрипта

Цитата:
Need for Speed™ Undercover.iss v 2.4c [Final] от YURSHAT
Автор: nik1967
Дата сообщения: 04.03.2012 12:19
Hell_Dog2011
Цитата:
вчём может быть причина?
Экстрасенсы в отпуске. Но сдаётся мне, что причина в твоём скрипте
Автор: Nasgul1987
Дата сообщения: 04.03.2012 13:26
nik1967
спасибо
второй вылетает с ошибкой TMsg

уже сделал по своему
взял за основу первый пример
всё работает
сделал так
procedure InitializeWizard();
форма
всё остальное в темп (3 секунды)
закрыть форму
конец

Автор: nik1967
Дата сообщения: 04.03.2012 19:21
Nasgul1987
Цитата:
второй вылетает с ошибкой TMsg
Ну так закомментировал бы:[more=Пример 2]
Код: [Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
Compression=lzma
SolidCompression=yes

[Files]
;Source: MyProg.exe; DestDir: {app}

[_Code]
{type
TMsg = record
hwnd: HWnd;
msg: Word;
wParam: Word;
lParam: Word;
time: Longint;
pt: TPoint;
end;}

var
CancelBtn: TButton;
Msg: TMsg;

Function PeekMessage(var Msg: TMsg; Wnd: HWnd; MsgFilterMin, MsgFilterMax, wRemoveMsg: LongInt): LongInt; external 'PeekMessageW@user32.dll stdcall';

Procedure ProcessMessage();
begin
MsgBox('hello', mbInformation, MB_OK);
end;

procedure InitializeWizard();
var
Form: TSetupForm;
ProgressBar: TNewProgressBar;
i: integer;
// Wnd: HWND;
res: LongInt;

begin
Form := CreateCustomForm();
try
with Form do
begin
ClientWidth := ScaleX(380);
ClientHeight := ScaleY(120);
BorderStyle:= bsDialog;
Center;
end;
CancelBtn := TButton.Create(Form);
with CancelBtn do
begin
Width := ScaleX(75);
Height := ScaleY(23);
Left := Form.ClientWidth - ScaleX(75 + 10);
Top := Form.ClientHeight - ScaleY(23 + 10);
Parent := Form;
Caption := 'Îòìåíà';
end;
ProgressBar := TNewProgressBar.Create(Form);
with ProgressBar do
begin
Height := CancelBtn.Height - ScaleY(8);
Width := Form.Width - ScaleX(128);
Top := ScaleX(10);
Left := ScaleY(10);
Parent := Form;
Min:= 0;
Max:= 100;
Position := 0;
end;
Form.ActiveControl:= CancelBtn;
Form.Show();
for i:= 0 to 100 do
begin
res:= PeekMessage(Msg, CancelBtn.Handle, $0202, $0202, 1);
if res <> 0 then
begin
ProcessMessage();
end;
ProgressBar.Position:= ProgressBar.Position + 1;
Form.Refresh;
Sleep(1);
end;
finally
Form.Free();
end;
end;
Автор: Hell_Dog2011
Дата сообщения: 04.03.2012 20:32
помоги плизз когда создал инстолятор доходит установка до 100% и после этого происходит отмена измененных файлов.

Добавлено:

Цитата:
Экстрасенсы в отпуске. Но сдаётся мне, что причина в твоём скрипте

понимаю конечно, пользовался твоим скриптом на примери ксенуса,всё ок было, а теперь вот решил на такое оформление перейти, ещё вопрос, как сделать чтобы компоненты устанавливались лись те которые выбраны, а не все, выбираешь один распоковываються 2.

Добавлено:
Вотан скрипт
Цитата:
При создании репака всё готова начинаешь устанавливать, доходит до 100% и идёт почемуто удаление вчём может быть причина? делал по шаблону скрипта

Цитата:
Need for Speed™ Undercover.iss v 2.4c [Final] от YURSHAT

вот поэтой проблеме, кто может помогите. http://rghost.ru/36849669
Автор: alex0413
Дата сообщения: 04.03.2012 23:54
Hell_Dog2011
архив поврежден
Автор: Nasgul1987
Дата сообщения: 04.03.2012 23:55
nik1967

Цитата:
Ну так закомментировал бы

сделал бы не будь у меня дурного опыта с "затыканием" той же фигни здесь
[more]
Код: #define SrcPath "Files\"
#define Mask "*.*"

#define FindHandle
#define FindResult
#define SearchPath SrcPath + Mask
#define AllFilesSize 0
#define CurFileSize 0

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

[Files]
Source: compiler:InnoCallback.dll; Flags: dontcopy
#sub ProcessFoundFile
#define FileName FindGetFileName(FindHandle)
Source: {#SrcPath}{#FileName}; DestDir: {tmp}; Flags: ignoreversion; BeforeInstall: ProgressInit(); AfterInstall: ProgressReset()
#expr CurFileSize = FileSize(SrcPath + FileName)
#expr AllFilesSize = AllFilesSize + CurFileSize
#expr WriteIni( SourcePath + "\\SizeInfo.ini","Name", FileName, CurFileSize )
#expr WriteIni( SourcePath + "\\SizeInfo.ini","Size", "AllSize", AllFilesSize )
#endsub

#for {FindHandle = FindResult = FindFirst(SearchPath, 0); FindResult; FindResult = FindNext(FindHandle)} ProcessFoundFile

Source: SizeInfo.ini; Flags: dontcopy

[Code]
type
    TMsg = record
        hwnd: HWnd;
        msg: Word;
        wParam: Word;
        lParam: Word;
        time: Longint;
        pt: TPoint;
    end;

TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);

var
Msg: TMsg;
TimerID: LongWord;
ProgressBar: TNewProgressBar;
CurrentFileSize: LongInt;
OneStepSize: LongInt;
OldPosition: LongInt;
ReadyFlag: Boolean;
lbl, lbl1: TLabel;

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 WrapTimerProc(callback: TProc; paramcount: Integer): Longword; external 'wrapcallback@files:innocallback.dll stdcall';

procedure ProgressInit();
begin
ProgressBar.Min:= 0;
ProgressBar.Position:= 0;
OldPosition:= WizardForm.ProgressGauge.Position;

ProgressBar.Max:= GetIniInt('Name', ExtractFileName(ExpandConstant(CurrentFileName)), 0, 0, 0, ExpandConstant('{tmp}\SizeInfo.ini'));

ReadyFlag:= True;
end;

procedure ProgressReset();
begin
ReadyFlag:= False;
end;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
res: LongWord;
begin
if ReadyFlag then
begin
ProgressBar.Position:= ProgressBar.Position + (WizardForm.ProgressGauge.Position - OldPosition) ;
OldPosition:= WizardForm.ProgressGauge.Position;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
pfunc: LongWord;
begin
if CurStep = ssInstall then
begin
pfunc:= WrapTimerProc(@OnTimer, 4);
TimerID:= SetTimer(0, 0, 20, pfunc);
end;
end;

procedure InitializeWizard();
begin
ReadyFlag:= False;
ExtractTemporaryFile('SizeInfo.ini');

ProgressBar := TNewProgressBar.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
ProgressBar.Left := Left;
ProgressBar.Top := Top + ScaleX(30);
ProgressBar.Width := Width;
ProgressBar.Height := Height;
ProgressBar.Parent := WizardForm.InstallingPage;
ProgressBar.Position := 0;
end;
end;

procedure DeinitializeSetup();
begin
KillTimer(0, TimerID);
end;
Автор: ZIKIG
Дата сообщения: 05.03.2012 02:54
Всем привет!

Протестите пожалуйста инсталлятор.

Ссылка

Рядом положить (bin).
Автор: Hell_Dog2011
Дата сообщения: 05.03.2012 07:56
я понимаю что повреждён так по какой он причине может быть повреждён.
Автор: quorg
Дата сообщения: 05.03.2012 12:10
ZIKIG

Цитата:
Протестите пожалуйста инсталлятор.  

Нормально, только желательно бы ещё автовыбор диска с допустимым свободным местом для установки и (или) распаковки временных файлов.
Автор: TimonDVD
Дата сообщения: 06.03.2012 18:18
привет всем, я начинающий пользователь данного софта, не пойму как сделать инсталлятор для х64, то бишь х86 и х64 в одном компилляторе, с автоматическим распознаванием системы. Напишите код если вам не трудно, заранее спасибо тем кто откликнется
Автор: Kindly
Дата сообщения: 06.03.2012 21:22
TimonDVD - так не учатся! Читай справку и мануалы, смотри примеры, а затем спрашивай в непонятном месте, а не сделайте за меня.
Автор: TimonDVD
Дата сообщения: 06.03.2012 22:41
Kindly
так я справку смотрел, в частности "Типы установки" думал там найду, смотрел в Inno Setup Scripting v5.1 от тебя, (кстати большое спасибо за это чудо) думал там найду, смотрел так же есть куча скриптов примеров, но ни где об этом не написано, я даже подумывал что невозможно это сделать с помошью Инно. Киндли ты хоть укажи мне где именно искать, читать я могу) и напрячь мозг мне не влом, и желание хоть отбавляй. Я недели 2 уже парюсь над этим до 6 утра практический)) всё из-за того что я новичок в этом деле, благодарен за отклик, уж не думал что сам спец наткнётся на мой пост)


Добавлено:
Kindly
вот этот параметр ArchitecturesInstallIn64BitMode=x64 ia64 я думал сделает мой пакет под х64, а отладчик показывает Windows x64: No, не обессудь я учусь просто логический и по аналогии, просматривая скрипты методом тыка изучаю
Автор: Genri
Дата сообщения: 07.03.2012 00:37
TimonDVD

Цитата:
как сделать инсталлятор для х64, то бишь х86 и х64 в одном компилляторе, с автоматическим распознаванием системы
-- буквально две страницы назад - http://forum.ru-board.com/topic.cgi?forum=5&topic=36421&start=3500#5
Но в первую очередь изучи примеры, которые находятся на твоем компе, в папке ...\Inno Setup\Examples. Особенно обрати внимание на примеры, названия файлов которых начинается на 64 (64Bit.iss и пр.)
Автор: TimonDVD
Дата сообщения: 07.03.2012 02:46
Genri
попробую Генри, спасибо за помощь я ещё отпишусь не проподайте
Автор: Alexan
Дата сообщения: 07.03.2012 11:42
Каким образом можно запретить установку программы на сетевой диск, учитывая, что путь установки может быть двух видов:
1. \\сервер\папка
2. х:\папка (х - подключенный сетевой диск)

С первым случаем все понятно, а вот со вторым нет. Как зная диск узнать что он сетевой?

Автор: log1stable
Дата сообщения: 07.03.2012 19:11
Почему элементы FileNameLabel, StatuslLabel и ProgressGauge не отображаются, если их переместить на другой TNewNotebook?
Автор: meekrab
Дата сообщения: 08.03.2012 06:57
log1stable
Нужно их подключить на нужной вам стр.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177

Предыдущая тема: поиск


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.