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

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

Автор: shmel1985q
Дата сообщения: 10.09.2011 22:30
Всем привет, подскажите что я делаю не так мне нужно распаковать arc-srep-arc, может чего то не хватает?

if not ISArcExtract ( 0, 100, ExpandConstant('{src}\*.arc'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISSRepExtract ( 0, 0, ExpandConstant('{app}\*.srep'),ExpandConstant('{app}\*.arc'), true) then break;

Добавлено:
и еще что может быть после распаковки 7z остайотся в папке и не удаляется автоматически

if not ISArcExtract ( 0, 100, ExpandConstant('{src}\*.bin'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISSRepExtract ( 0, 0, ExpandConstant('{app}\*.srep'),ExpandConstant('{app}\*.7z'), true) then break;
if not IS7ZipExtract ( 0, 0, ExpandConstant('{app}\*.7z'), ExpandConstant('{app}\'), false, '') then break;
Автор: 13Friday
Дата сообщения: 11.09.2011 00:24
log1stable

Цитата:
Кстати, что у тебя за компилятор, что использует PChar?

Я использую Inno Setup Compiler 5.4.0.ee2 (a) - ISPP 5.3.9e1(a) и он выдаёт ошибку на OldEvent_NextButtonClick(Sender);...
Автор: log1stable
Дата сообщения: 11.09.2011 05:11
13Friday, где это ты нашёл эту строку? У меня в коде её нету.

OldEvent_NextButtonClick(Sender); записывается в процедуру _NextButtonClick для того, чтобы кнопка 'Next>' выполняла свою основную функцию.


Код:
procedure _NextButtonClick(Sender: TObject);
begin
OldEvent_NextButtonClick(Sender);
end;
Автор: PRIZ2rak
Дата сообщения: 11.09.2011 11:55
Подскажите пожалуйста код двух страниц:

1 стр - Содержит 3 и б. пунктов выбора (RadioButton):
Прога1
Прога2
Прога3
.........

2 стр - для каждой программы своя, с возможностью выбора компонентов.

Т.е. в результате нужно получить, возможность установки только нужной программы с выбором необходимых параметров её установки.

PS: http://forum.ru-board.com/topic.cgi?forum=5&topic=36421&start=1800#20 - вариант не подходит из-за отсутствия 2-й страницы.
Автор: exgamer
Дата сообщения: 11.09.2011 13:12
nik1967
http://rghost.ru/21186971
Автор: VASYAKRN
Дата сообщения: 11.09.2011 13:15
текстурирувал кнопки и вибивает ошибки помогите пожалста
Ссылка
Автор: 13Friday
Дата сообщения: 11.09.2011 14:02
log1stable

Цитата:
где это ты нашёл эту строку? У меня в коде её нету.
Вот

Обновил до Inno Setup 5.4.2.ee2 тоже самое, а если удалить то вот
Автор: Percey123
Дата сообщения: 11.09.2011 14:34
Помогите, пожалуйста, ответить на пару вопросов:
1) Немного странный вопрос, но всё же для чего игра заносит данные в реестр? И за что они могут отвечать?
2) Может ли перепакованная игра запуститься без этих данных? И если запустится, то как это может отразиться в будущем?
Автор: Edison007007
Дата сообщения: 11.09.2011 14:39
Percey123
а какое отношение твои вопросы имеют к этой теме?
Автор: log1stable
Дата сообщения: 11.09.2011 14:55
13Friday, Пробуй это.

Добавлено:
Percey123, при установке данные заносит туда инсталлятор для того, чтобы игра(программа) брала оттуда некоторую информацию, например, язык. В некоторых играх делают так: В реестр заносят параметр Language = English, и язык игры - Английский. Если поменять на Language = Russian, то язык игры - Русский, соответственно. Так вот немалая часть софта, если не видит веточки и значения в реестре, то не запускается, либо выдает ошибку, либо запускается, но косячно. Есть исключения, например, все игры от valvE(Counter-Strike 1.6, Counter-Strike: Source, Half-Life 2 и т.д.) запускаютя без ключей в реестре.
Автор: 13Friday
Дата сообщения: 11.09.2011 15:05
log1stable
Залей плиз сам скрипт так как у меня трафик и через мобилку...
Автор: log1stable
Дата сообщения: 11.09.2011 15:08
13Friday, Вот сам скрипт.

Добавлено:
PRIZ2rak, Вот, что-то похожее на твою просьбу. Правда, скрипт немного хиленько выглядит внутри, т.к. создавал через Form Designer, а потом переписывал в InitializeWizard. Внешний вид - норм.

Добавлено:
VASYAKRN, единственная вылетающая ошибка у меня, это PChar. Достаточно заменить все PChar на PAnsiChar.
Автор: Percey123
Дата сообщения: 11.09.2011 15:57
Edison007007
Косвенным образом имеют, т.к. для перепаковки всё же нужны данные реестра.

log1stable
Спасибо за ответ.
Автор: VASYAKRN
Дата сообщения: 11.09.2011 16:06
Ссылка

как убрать
фон

ошибки
Автор: log1stable
Дата сообщения: 11.09.2011 16:24
VASYAKRN, попробуй [more=так]======================================
Inno Setup Faq. Текстурирование кнопок через botva2.dll
======================================
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName={pf}\MyApp

[Files]
Source: botva2.dll; DestDir: {tmp}; Flags: dontcopy
Source: compiler:innocallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: Button.png; DestDir: {tmp}; Flags: dontcopy

[code]
type
TButtonInfo = record ButtonName: array of TButton; Handle: array of HWND; Count: Integer; end;
TBtnEventProc = procedure(h:HWND);

const
BtnClickEventID = 1;
BtnMouseEnterEventID = 2;
BtnMouseLeaveEventID = 3;
BtnMouseMoveEventID = 4;

balLeft = 0;
balCenter = 1;

var
ButtonsBuff: TButtonInfo;
HCancelButton, HNextButton, HBackButton, HDirBrowseButton, HGroupBrowseButton: HWND;

function WrapBtnCallback(Callback: TBtnEventProc; ParamCount: Integer): Longword; external 'wrapcallback@files:innocallback.dll stdcall';
function BtnCreate(hParent:HWND; Left,Top,Width,Height:integer; FileName:PChar; ShadowWidth:integer; IsCheckBtn:boolean):HWND; external 'BtnCreate@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetPosition(h:HWND; NewLeft, NewTop, NewWidth, NewHeight: integer); external 'BtnSetPosition@files:botva2.dll stdcall';
procedure BtnRefresh(h:HWND); external 'BtnRefresh@files:botva2.dll stdcall';
function BtnGetChecked(h:HWND):boolean; external 'BtnGetChecked@files:botva2.dll stdcall';
procedure BtnSetChecked(h:HWND; Value:boolean); external 'BtnSetChecked@files:botva2.dll stdcall';
procedure BtnSetText(h:HWND; Text:PAnsiChar); external 'BtnSetText@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetTextAlignment(h:HWND; HorIndent, VertIndent:integer; Alignment:DWORD); external 'BtnSetTextAlignment@files:botva2.dll stdcall';
procedure BtnSetVisibility(h:HWND; Value:boolean); external 'BtnSetVisibility@files:botva2.dll stdcall';
function BtnGetEnabled(h:HWND):boolean; external 'BtnGetEnabled@files:botva2.dll stdcall';
procedure BtnSetEnabled(h:HWND; Value:boolean); external 'BtnSetEnabled@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetFont(h:HWND; Font:Cardinal); external 'BtnSetFont@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetFontColor(h:HWND; NormalFontColor, FocusedFontColor, PressedFontColor, DisabledFontColor: Cardinal); external 'BtnSetFontColor@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetEvent(h:HWND; EventID:integer; Event:Longword); external 'BtnSetEvent@files:botva2.dll stdcall';
procedure BtnSetCursor(h:HWND; hCur:Cardinal); external 'BtnSetCursor@files:botva2.dll stdcall';
function GetSysCursorHandle(id:integer):Cardinal; external 'GetSysCursorHandle@files:botva2.dll stdcall';
procedure gdipShutdown; external 'gdipShutdown@files:botva2.dll stdcall';

procedure UpdateButtons();
var I: integer;
begin
for I:=0 to (ButtonsBuff.Count-1) do begin
BtnSetEnabled(ButtonsBuff.Handle[I], ButtonsBuff.ButtonName[I].Enabled)
BtnSetVisibility(ButtonsBuff.Handle[I], ButtonsBuff.ButtonName[I].Visible)
BtnSetText(ButtonsBuff.Handle[I], ButtonsBuff.ButtonName[I].Caption)
BtnRefresh(ButtonsBuff.Handle[I])
end;
end;

procedure ButtonOnClick(hBtn: HWND);
var Btn: TButton; I: Integer;
begin
for I:=0 to (ButtonsBuff.Count-1) do begin
if hBtn = ButtonsBuff.Handle[I] then Btn:= ButtonsBuff.ButtonName[I];
end;
Btn.OnClick(Btn)
UpdateButtons;
end;

function EffectTextureButton(Handle: HWND; Button: TButton; ImageName: PAnsiChar; ShadowWidth: Integer; EnterEvent, MoveEvent, LeaveEvent: TbtnEventProc): HWND;
begin
Result:=BtnCreate(Handle, Button.Left-8, Button.Top-8, Button.Width+16, Button.Height+16, ImageName, ShadowWidth, False) //Размеры подобраны для текущей текстуры
BtnSetEvent(Result, BtnClickEventID, WrapBtnCallback(@ButtonOnClick, 1))
if EnterEvent <> nil then BtnSetEvent(Result, BtnMouseEnterEventID, WrapBtnCallback(EnterEvent, 1));
if MoveEvent <> nil then BtnSetEvent(Result, BtnMouseMoveEventID, WrapBtnCallback(MoveEvent, 1));
if LeaveEvent <> nil then BtnSetEvent(Result, BtnMouseLeaveEventID, WrapBtnCallback(LeaveEvent, 1));
BtnSetFont(Result, Button.Font.Handle)
BtnSetText(Result, Button.Caption);
BtnSetVisibility(Result, Button.Visible);
BtnSetFontColor(Result,clBlack,clBlack,clBlack,clGray);
BtnSetCursor(Result,GetSysCursorHandle(32649));
Button.Width:=0; Button.Height:= 0;
SetArrayLength(ButtonsBuff.Handle, ButtonsBuff.Count+1);SetArrayLength(ButtonsBuff.ButtonName, ButtonsBuff.Count+1);
ButtonsBuff.ButtonName[ButtonsBuff.Count]:= Button; ButtonsBuff.Handle[ButtonsBuff.Count]:= Result;
ButtonsBuff.Count:= ButtonsBuff.Count+1;
end;

procedure ButtonChangeFont(ButtonHandle: HWND; Font: TFont; NormalColor, FocusedColor, PressedColor, DisabledColor: Cardinal);
begin
if Font <> nil then BtnSetFont(ButtonHandle, Font.Handle);
BtnSetFontColor(ButtonHandle, NormalColor, FocusedColor, PressedColor, DisabledColor)
end;

procedure InitializeWizard();
begin
ExtractTemporaryFile('Button.png')
HNextButton:= EffectTextureButton(WizardForm.Handle, WizardForm.NextButton, ExpandConstant('{tmp}\Button.png'), 18, nil, nil, nil)
HCancelButton:= EffectTextureButton(WizardForm.Handle, WizardForm.CancelButton, ExpandConstant('{tmp}\Button.png'), 18, nil, nil, nil)
HBackButton:= EffectTextureButton(WizardForm.Handle, WizardForm.BackButton, ExpandConstant('{tmp}\Button.png'), 18, nil, nil, nil)
HDirBrowseButton:= EffectTextureButton(WizardForm.Handle, WizardForm.DirBrowseButton, ExpandConstant('{tmp}\Button.png'), 18, nil, nil, nil)
HGroupBrowseButton:= EffectTextureButton(WizardForm.Handle, WizardForm.GroupBrowseButton, ExpandConstant('{tmp}\Button.png'), 18, nil, nil, nil)
end;

procedure CurPageChanged(CurPageId: Integer);
begin
UpdateButtons
end;

procedure DeinitializeSetup();
begin
gdipShutdown
end;
[/more]. Четыре кнопки(Normal, OnMouse, Pressed, Disabled) должны быть друг над другом на некотором расстоянии в картинке Button.png
Автор: VASYAKRN
Дата сообщения: 11.09.2011 16:28

Цитата:
VASYAKRN, попробуй так. Четыре кнопки(Normal, OnMouse, Pressed, Disabled) должны быть друг над другом на некотором расстоянии в картинке Button.png

все ровно никак
Автор: log1stable
Дата сообщения: 11.09.2011 16:35
VASYAKRN, тогда извини. Я без понятия, в чём проблема. Может, скрипты крашат один другой. Я видел, там ISJoiner использовался.
Автор: VASYAKRN
Дата сообщения: 11.09.2011 16:50
log1stable
У меня естьтот скрипт только без текстурируваних кнопок
Ти мог би текстурирувать кнопки неважно чим
Автор: log1stable
Дата сообщения: 11.09.2011 17:00
VASYAKRN, давай скрипт, попробую
Автор: Brabusdark
Дата сообщения: 11.09.2011 17:13
да VASYAKRN
скинь скрипт, тоже попробую
Автор: VASYAKRN
Дата сообщения: 11.09.2011 17:17
держите Ссылка
Автор: log1stable
Дата сообщения: 11.09.2011 17:54
VASYAKRN, Вот. Это через .bmp. Не самый красивый вариант, конечно. Чуток подкорректируй под себя, если надо. Конечно, нужно найти решение проблемы с первым вариантом текстурирования -- он по-красивее.
Автор: VASYAKRN
Дата сообщения: 11.09.2011 18:34
почему не текстурирувалася кнопка обзор
Автор: log1stable
Дата сообщения: 11.09.2011 18:57
VASYAKRN, хм. Должна быть текстурированной. На нее загружается картинка в строке инициализации.
Автор: Mataes
Дата сообщения: 11.09.2011 23:20
Здравствуйте, подскажите, пожалуйста, можно ли как то получить строку, которую пишет inno в Deselected Components? И как убрать предупреждение о том, что выбрана уже существующая папка для установки?
Автор: vistaw
Дата сообщения: 12.09.2011 11:27
Mataes
2) DirExistsWarning=auto

Возможные значения:
auto, yes, или no
Значение по умолчанию:
auto
Автор: ShadowHawk
Дата сообщения: 12.09.2011 11:44
NumberI

Код , который я выкладывал


Цитата:
16:40 09-09-2011


у тебя работает отдельно?

А то я не понимаю, ты часть его взял и вставил в свою программу или он совсем не работает???
Если не работает отдельно, то проблемы видимо в установленной версии Inno Setup.
Если часть не работает, то с этим разберемся
Главное что бы все переменные были определены.


Добавлено:

ALL


Подскажите плизз, почему даже небольшой (по размеру - 800 Мб. ) setup.exe может при первом запуске на WIN 7 висеть - причем висит 2 файла и setup.exe и setup.tmp!
Нужно убить их по очереди. И только после этого со второго раза начинает нормально работать инсталлятор.

Заранее спасибо!
Автор: vistaw
Дата сообщения: 12.09.2011 12:53
ShadowHawk
2) Setup.exe имеет приличный размер+сжатие => что этот сетапник распаковывается во временную папку temp, отсюда и название setup.tmp
Убивать их не стоит, а запускает их быстрее потому что setup.exe уже распакован и лежит в tempe.
Думаю так, если ошибаюсь поправьте.
Автор: ShadowHawk
Дата сообщения: 12.09.2011 13:28
vistaw

Я тоже так подумал, но ... у меня формируется 2 файла:
Setup-1.bin 800 Мб
Setup.exe 500 Кб

т.е. вроде бы setup не такой уж и большой получается, но тем не менее висит ??? и Setup.exe и Setup.tmp

Еще есть варианты?

Автор: Snoopak96
Дата сообщения: 12.09.2011 13:37
ShadowHawk,
Предполагаю, что у вас какие-то файлы использованы в самом инсталляторе, так их надо всегда в начале секции files указывать, иначе при запуске setup будет искать эти файлы во всех ваших bin-архивах пока не найдёт, занимает это довольно долгое время если файлов много, хотя что бы точно ответить нужно скрипт смотреть.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177

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


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