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

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

Автор: WildGoblin
Дата сообщения: 06.07.2012 08:28
ultimo

Цитата:
Насчет ярлыка в GamesExplorer проблема в силе. Кто может помочь или знает где взять хорошую инструкцию или справку - пишите)
Есть же всё в шапке!


Добавлено:
Sedjyan

Цитата:
Я тоже искал инфу по Game Explorer

Цитата:
А скрипт подключения нашел на:
и инфа и скрипт есть в шапке!

Автор: MOD_TEC
Дата сообщения: 06.07.2012 15:07
Как сделать двойной прогресс бар через IsDone...
Автор: Gnom3
Дата сообщения: 06.07.2012 16:12
MOD_TEC там в стандартном примере двойной и есть, разве нет?
Автор: MOD_TEC
Дата сообщения: 06.07.2012 16:24
Gnom3 мне нужно основной поделить на 2 ssInstall и ssPostInstall и отображались чтобы вместе...
Автор: Sedjyan
Дата сообщения: 06.07.2012 21:59
WildGoblin

Файл документации в шапке отсутствует, на обменнике удален. А в скрипте , если используешь библиотеку ресурсов GDF.dl со своими данными, надо еще устанавливать ключ реестра IsSigned в "1".
Скрипт в шапке прокатит если файл ресурсов фирменный, иначе рейтинг не виден.
Автор: MOD_TEC
Дата сообщения: 06.07.2012 23:38
Sedjyan пример бл... в шапке WildGoblin все уже растолковал....



Добавлено:
Gnom3 че там с барами чума...
Автор: WildGoblin
Дата сообщения: 07.07.2012 16:02
Sedjyan

Цитата:
Файл документации в шапке отсутствует, на обменнике удален.
Так выдерни его сам из DirectX SDK.

Цитата:
А в скрипте , если используешь библиотеку ресурсов GDF.dl со своими данными, надо еще устанавливать ключ реестра IsSigned в "1".
В чём проблема установкой ключа реестра IsSigned в "1"?

Цитата:
Скрипт в шапке прокатит если файл ресурсов фирменный, иначе рейтинг не виден.
Скрипт прокатит в любом случае, а рейтинг - кому он нужен?
Автор: Sergey_Demchuk
Дата сообщения: 07.07.2012 23:50
Может кто еще пользуется botva2.dll
Хочу разрисовать прогрессбар при джеинсталляции
Но что то не так видимо делаю.
Затык на функции CallWindowProc(PBOldProcUn,h,Msg,wParam,lParam);
Вызывает ошибку вызова процедуры
Вот кусок кода, может подскажете, в чем ошибка.

Код:
function CallBackProc(P:TPBProc;ParamCount:integer):LongWord; external 'wrapcallbackaddr@files:CallbackCtrl.dll stdcall';
function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint; external 'CallWindowProcA@user32.dll stdcall';
function GetTickCount: DWORD; external 'GetTickCount@kernel32.dll stdcall';
function GetTickCountUn: DWORD; external 'GetTickCount@kernel32.dll stdcall uninstallonly';
...
...
function PBProcUn(h:hWnd;Msg,wParam,lParam:Longint):Longint;
var
lt:Longint;
dt,at,pr,i1,i2:Extended;
p:string;
tc:DWORD;
begin
Result:=7;
Result:=CallWindowProc(PBOldProcUn,h,Msg,wParam,lParam);
if (Msg=$402) and (UninstallProgressForm.Progressbar.Position>UninstallProgressForm.Progressbar.Min) then begin
i1:=UninstallProgressForm.Progressbar.Position-UninstallProgressForm.Progressbar.Min;
i2:=UninstallProgressForm.Progressbar.Max-UninstallProgressForm.Progressbar.Min;

tc:=GetTickCountUn;
if (tc-eTimeUn)>=1000 then begin ïåðåñ÷èòûâåì âðåìÿ îñòàâøååñÿ äî êîíöà óñòàíîâêè íå ÷àùå, ÷åì ðàç â 1 ñåêóíäó
dt:=(tc-sTimeUn)/1000;
at:=i2*dt/i1;
lt:=Round(at-dt)
TimeLeftLabel.Caption:='Îñòàëîñü - '+LongintToStringTime(lt);
eTimeUn:=tc;
end;

pr:=i1*100/i2;
p:=' - ['+Format('%f',[pr])+'%]';
StringChange(p,',','.');
TimeLeftLabelUn.Caption:=WFCaption+p;
WizardForm.Caption:=WFCaption+p;

ImgPBSetPosition(NewPBun,pr);
ImgApplyChanges(UninstallProgressForm.Handle);
end;
end;
...
...
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
Names: TArrayOfSting;
I, Errorcode: Integer;
S,RegAss: String;

begin
if CurUninstallStep=usUninstall then
begin
NewPBun:=ImgPBCreate(UninstallProgressForm.InstallingPage.Handle, ExpandConstant('{tmp}\pbbkg.png'), ExpandConstant('{tmp}\pb.png'),UninstallProgressForm.Progressbar.Left,UninstallProgressForm.Progressbar.Top,UninstallProgressForm.Progressbar.Width,25);
ImgApplyChanges(UninstallProgressForm.InstallingPage.Handle);

WFCaption:=UninstallProgressForm.Caption;

TimeLeftLabelUn:=TLabel.Create(nil);
with TimeLeftLabelUn do begin
Parent:=UninstallProgressForm.InstallingPage;
AutoSize:=False;
SetBounds(ScaleX(400),ScaleY(150),ScaleX(400),ScaleY(21));
Transparent:=True;
Font.Color:=clWhite;
Font.Style:= [fsBold];
end;

sTimeUn:=GetTickCountUn;
eTimeUn:=sTimeUn;

PBOldProcUn:=SetWindowLong(UninstallProgressForm.InstallingPage.Handle,-4,CallBackProc(@PBProcUn,4));

end;


Автор: ARS23
Дата сообщения: 08.07.2012 15:18

Цитата:
CallbackCtrl.dll

во время InitializeUninstall надо копировать его в темп
Автор: Sergey_Demchuk
Дата сообщения: 08.07.2012 16:48
ARS23
Копируется
Автор: troyan90
Дата сообщения: 08.07.2012 18:27
Sergey_Demchuk
возов функции из длл еще исправить

Код: function CallBackProc(P:TPBProc;ParamCount:integer):LongWord; external 'wrapcallbackaddr@{tmp}\CallbackCtrl.dll stdcall';
Автор: rsg16
Дата сообщения: 08.07.2012 21:36
Доброго времени суток всем! Подскажите пожалуйста как сделать чтобы в текстовом файле менялось значение рядка, при выборе языка. Я пытался делать так:
FileName: "{app}\rev.ini"; Section: "Emulator"; Key: "Language"; Value: {Languages};//выдает ошибку на {Languages}, что не корректное значение
но у меня ничего не получилось...
нужно чтобы менялось так:
Language={язык}
значение {язык} должно меняться зависимости от выбора языка установки
Автор: troyan90
Дата сообщения: 08.07.2012 23:32
rsg16
[more=пример]
Код: [_Languages]
Name: "Russian"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "English"; MessagesFile: "compiler:Default.isl"

[_code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
SetIniString('Emulator', 'Language', ActiveLanguage, ExpandConstant('{app}\rev.ini'));
end;
Автор: rsg16
Дата сообщения: 09.07.2012 01:05
troyan90, спс работает
Автор: Gideon Vi
Дата сообщения: 09.07.2012 06:03
Пардон, а Inno Setup Unpacker enhanced свежее, чем в шапке, не пробегало?
Автор: WildGoblin
Дата сообщения: 09.07.2012 09:34
Gideon Vi

Цитата:
Пардон, а Inno Setup Unpacker enhanced свежее, чем в шапке, не пробегало?
В чём его отличие от обычного innounp (который сейчас доступен версии 0.37)?

Добавлено:
Gideon Vi

Цитата:
Пардон, а Inno Setup Unpacker enhanced свежее, чем в шапке, не пробегало?
Просто замени, в архиве, старый innounp.exe на новый (версии 0.37) и будет новая версия.

Добавлено:
Gideon Vi
http://rghost.ru/39112948
Автор: alex0413
Дата сообщения: 11.07.2012 13:37
Скажите, как можно сделать такое:
Например у меня есть запись Rec, и в ней
first: integer;
second: integer;
third: integer;
Sum: ????
Как сделать что-бы при вызове Rec.Sum выполнялась отдельная процедура или функция?
Автор: MrDum32
Дата сообщения: 11.07.2012 15:53
Есть страница с четыремя Checkbox'ами - паскаль. Все собирается и пашет, одна маленькая проблемка - при нажатии (установке галочки) на Checkbox действие происходит сразу, в моем случае устанавливается доп. п.о.. Как это исправить? Если у кого есть такая страница, уже написанная, буду очень признателен за нее. Только не Delphi'йскую.
Автор: Shegorat
Дата сообщения: 11.07.2012 17:15
alex0413 14:37 11-07-2012
Цитата:
Как сделать что-бы при вызове Rec.Sum выполнялась отдельная процедура или функция?

В инно - нельзя.

MrDum32 16:53 11-07-2012
Цитата:
Есть страница с четыремя Checkbox'ами - паскаль. Все собирается и пашет, одна маленькая проблемка - при нажатии (установке галочки) на Checkbox действие происходит сразу, в моем случае устанавливается доп. п.о.. Как это исправить? Если у кого есть такая страница, уже написанная, буду очень признателен за нее. Только не Delphi'йскую.

Убрать действие OnClick у чекбоксов и весь софт устанавливать в CurStepCahnged при CurStep=ssPostInstall. Если нужна более конкретная помощь, то выложи код.

Добавлено:
WildGoblin 10:34 09-07-2012
Цитата:
Просто замени, в архиве, старый innounp.exe на новый (версии 0.37) и будет новая версия.

У innounp.exe немного изменился формат командной строки, поэтому такой вариант не прокатит. Простое изменение команды в exe тоже не поможет, потому как там ком. строка формируется функцией по типу Format.
Автор: MrDum32
Дата сообщения: 11.07.2012 18:56
Изначально, когда мне был нужен только один Checkbox, обновить DirectX, я писал постинсталл:

[more=Подробнее...]
[Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
ErrorCode: Integer;
begin
if CurStep = ssPostInstall then
begin
with WizardForm do
begin
Color := clBlack;
end;

with WizardForm.InnerPage do
begin
Color := clBlack;
end;

with WizardForm.MainPanel do
begin
Color := clBlack;
end;

with WizardForm.PageDescriptionLabel do
begin
Font.Color := clYellow;
ParentFont := False;
end;

with WizardForm.PageNameLabel do
begin
Font.Color := clYellow;
end;

with WizardForm.StatusLabel do
begin
Font.Color := clYellow;
end;

WizardForm.ProgressGauge.Hide;
WizardForm.StatusLabel.Caption := 'Обновляется DirectX 9.0c...';
Exec(ExpandConstant('{src}\Support\DirectX\Dxsetup.exe'), '/silent', '', SW_Hide, ewWaitUntilTerminated , ErrorCode);

end;
end;

Потом, мне стало нужно пичкать всякие visual c и т.д.. Пришлось писать новую страницу, вот как она выглядит с одним Checkbox'ом:

[Code]
var
ISCustomPage1: TWizardPage;
NewCheckBox1: TNewCheckBox;

procedure NewCheckBox1Click(Sender: TObject); forward;

procedure InitializeWizard();
begin
{ Creates custom wizard page }
ISCustomPage1 := CreateCustomPage(wpInfoAfter, 'ISCustomPage1_Caption', 'ISCustomPage1_Description');

{ ISCustomPage1 }
with ISCustomPage1.Surface do
begin
Name := 'ISCustomPage1';
end;

{ NewCheckBox1 }
NewCheckBox1 := TNewCheckBox.Create(WizardForm);
with NewCheckBox1 do
begin
Name := 'NewCheckBox1';
Parent := ISCustomPage1.Surface;
Left := ScaleX(56);
Top := ScaleY(40);
Width := ScaleX(297);
Height := ScaleY(25);
OnClick := @NewCheckBox1Click;
end;

NewCheckBox1.TabOrder := 0;
end;

procedure NewCheckBox1Click(Sender: TObject);
var
ResultCode: Integer;
begin
WizardForm.NextButton.Enabled := True
if(NewCheckBox1.State = cbChecked) then
Exec(ExpandConstant('{src}\Support\DirectX\DXSETUP.EXE'), '/silent', '', SW_SHOW,
ewWaitUntilTerminated, ResultCode)
end;
[/more]
Жму на него, и сразу происходит исполнение...
Автор: ultimo
Дата сообщения: 11.07.2012 19:16
Вопрос: как реализовать параметр UNCHECKED для компонентов Inno? Пример:

Код: Name: "Core"; Description: "{#ShortModName} Core v{#ModVersion}"; Types: Full
Автор: MrDum32
Дата сообщения: 11.07.2012 19:22
попробуй Checked=false
Автор: ultimo
Дата сообщения: 11.07.2012 19:23
MrDum32
это надо грамотно реализовать в функции. Мне это ничего не дало...
Автор: alex0413
Дата сообщения: 11.07.2012 19:48
ultimo
а ты пробовал без Types: full?
В зависимости от типа установки некоторые компоненты выбранные, а некоторые – нет.
Автор: ultimo
Дата сообщения: 11.07.2012 19:52
alex0413
омг. Ты не поверишь, но я перед сном подумал об этом, проснулся на утро - и забыл все на свете. Бывает же такое. Мне часто нужные мысли приходят перед сном...
Туплю, че...
Автор: alex0413
Дата сообщения: 11.07.2012 20:01
MrDum32
ну вроде ясно было написано...

Цитата:
Убрать действие OnClick у чекбоксов и весь софт устанавливать в CurStepCahnged при CurStep=ssPostInstall

[more][no]
[Code]
var
ISCustomPage1: TWizardPage;
NewCheckBox1: TNewCheckBox;

procedure InitializeWizard();
begin
{ Creates custom wizard page }
ISCustomPage1 := CreateCustomPage(wpSelectDir, 'ISCustomPage1_Caption', 'ISCustomPage1_Description');

{ ISCustomPage1 }
with ISCustomPage1.Surface do
begin
Name := 'ISCustomPage1';
end;

{ NewCheckBox1 }
NewCheckBox1 := TNewCheckBox.Create(WizardForm);
with NewCheckBox1 do
begin
Name := 'NewCheckBox1';
Parent := ISCustomPage1.Surface;
Left := ScaleX(56);
Top := ScaleY(40);
Width := ScaleX(297);
Height := ScaleY(25);
end;

NewCheckBox1.TabOrder := 0;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode: Integer;
begin
if CurStep = ssPostInstall then begin
WizardForm.NextButton.Enabled := false;
if(NewCheckBox1.State = cbChecked) then
Exec(ExpandConstant('{src}\Support\DirectX\DXSETUP.EXE'), '/silent', '', SW_SHOW,
ewWaitUntilTerminated, ResultCode);
WizardForm.NextButton.Enabled := true;
end;
end;
[/no][/more]
Автор: MrDum32
Дата сообщения: 11.07.2012 20:35
alex0413

Спасибо! Я еще "чайниковат", нужно пояснение. Теперь вот понял!
Автор: MrDum32
Дата сообщения: 12.07.2012 02:49
Создал страницу вот так, если можно, попросил-бы ее отредактировать:

[more=Подробнее...]
[Code]
var
DirectXPage: TWizardPage;
Panel1: TPanel;
NewCheckBox1: TNewCheckBox;
NewCheckBox2: TNewCheckBox;
NewCheckBox3: TNewCheckBox;

procedure InitializeWizard();
begin
{ Creates custom wizard page }
DirectXPage := CreateCustomPage(wpSelectDir, 'Установка дополнительного программного обеспечения', 'Какое дополнительное программное обеспечение требуется установить?');

with WizardForm do
begin
Color := clBlack;
end;

with WizardForm.InnerPage do
begin
Color := clBlack;
end;

with WizardForm.MainPanel do
begin
Color := clBlack;
end;

with WizardForm.PageDescriptionLabel do
begin
Font.Color := clYellow;
ParentFont := False;
end;

with WizardForm.PageNameLabel do
begin
Font.Color := clYellow;
end;

{ ISCustomPage1 }
with DirectXPage.Surface do
begin
Name := 'DirectXPage';
Color := clBlack;
end;

{ Panel1 }
Panel1 := TPanel.Create(WizardForm);
with Panel1 do
begin
Name := 'Panel1';
Parent := DirectXPage.Surface;
Left := ScaleX(0);
Top := ScaleY(0);
Width := ScaleX(417);
Height := ScaleY(32);
Caption := 'Какое программное обеспечение необходимо установить?';
Color := clBlack;
Font.Color := clYellow;
Font.Height := -11;
Font.Name := 'Tahoma';
Font.Style := [];
ParentFont := False;
end;

{ NewCheckBox1 }
NewCheckBox1 := TNewCheckBox.Create(WizardForm);
with NewCheckBox1 do
begin
Name := 'NewCheckBox1';
Parent := DirectXPage.Surface;
Left := ScaleX(16);
Top := ScaleY(50);
Width := ScaleX(280);
Height := ScaleY(20);
Color := clGray;
Font.Color := clYellow;
Caption := 'Установка Microsoft DirectX 9c';
end;

{ NewCheckBox2 }
NewCheckBox2 := TNewCheckBox.Create(WizardForm);
with NewCheckBox2 do
begin
Name := 'NewCheckBox2';
Parent := DirectXPage.Surface;
Left := ScaleX(16);
Top := ScaleY(90);
Width := ScaleX(280);
Height := ScaleY(20);
Color := clGray;
Font.Color := clYellow;
Caption := 'Установка Microsoft Visual C++';
end;

{ NewCheckBox3 }
NewCheckBox3 := TNewCheckBox.Create(WizardForm);
with NewCheckBox3 do
begin
Name := 'NewCheckBox3';
Parent := DirectXPage.Surface;
Left := ScaleX(16);
Top := ScaleY(130);
Width := ScaleX(280);
Height := ScaleY(20);
Color := clGray;
Font.Color := clYellow;
Caption := 'Установка Microsoft NET Framework 2.0';
end;

Panel1.TabOrder := 0;
NewCheckBox1.TabOrder := 1;
NewCheckBox2.TabOrder := 2;
NewCheckBox3.TabOrder := 3;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode: Integer;
begin
if CurStep = ssPostInstall then begin
WizardForm.NextButton.Enabled := false;
if(NewCheckBox1.State = cbChecked) then
Exec(ExpandConstant('{src}\Support\DirectX\DXSETUP.EXE'), '/silent', '', SW_SHOW,
ewWaitUntilTerminated, ResultCode);
if(NewCheckBox2.State = cbChecked) then
Exec(ExpandConstant('{src}\Support\vcredist_x86.EXE'), '', '', SW_SHOWNORMAL,
ewWaitUntilTerminated, ResultCode);
if(NewCheckBox3.State = cbChecked) then
Exec(ExpandConstant('{src}\Support\dotnetfx.EXE'), '', '', SW_SHOWNORMAL,
ewWaitUntilTerminated, ResultCode);
WizardForm.NextButton.Enabled := true;
end;
end;
[/more]

И вот еще что. Почему-то, когда я меняю расположение страницы с wpSelectDir на wpInfoAfter перестает срабатывать Exec(ExpandConstant).
Автор: alex0413
Дата сообщения: 12.07.2012 09:39
MrDum32
а что в ней редактировать?

Цитата:
Почему-то, когда я меняю расположение страницы с wpSelectDir на wpInfoAfter перестает срабатывать Exec(ExpandConstant).

страница wpInfoAfter находится после страницы установки, и по этому флаги тогда еще не отмечены.
Автор: WildGoblin
Дата сообщения: 12.07.2012 10:22
Shegorat

Цитата:
У innounp.exe немного изменился формат командной строки, поэтому такой вариант не прокатит.
Скажи пожалуйста откуда такие сведения и что именно там изменилось? В описании команд нет изменений, новых команд (по сравнению с версией 36) тоже нет.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177

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


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