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

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

Автор: Snake193
Дата сообщения: 09.06.2008 19:10
Программа как раз и есть от EA.
Значит по принципу. Если ключ найден - страница переключается, если нет - закрытие инсталлятора. Спасибо!
Но тогда интересно, зачем инсталлятор NFS ProStreet проверяет коды выхода (это я узнал когда InstallShield'ом открыл MSI файл).
Автор: serg_aka_lain
Дата сообщения: 09.06.2008 19:51
Snake193

Может там другой принцип проверок.
Автор: Snake193
Дата сообщения: 09.06.2008 20:15
Ладно, все равно спасибо. А я чёт и не догадался использовать проверку реестра.
Кстати, возможно, в их инсталляторах и используется такой метод, т.к. при вскрытии InstallShield'а нашел какие то настройки похожие на поиск ключа. К тому же эти их мудули как при запуске, так и при нажатии на кнопку "Отмена" (наверно сделали на всякий случай) сразу же стирают найденное значение в реестре.
Автор: serg_aka_lain
Дата сообщения: 09.06.2008 21:19
Snake193

Цитата:
сразу же стирают найденное значение в реестре.

Истина так, я тоже это заметил и предложил провереу реестра.
Автор: Snake193
Дата сообщения: 09.06.2008 21:32
Еще раз спасибо!
Автор: AlexDJ666
Дата сообщения: 10.06.2008 07:37
И как всегда еще вопросы

Разбираюсь в свойствах кнопок, сделал, чтобы страницы перелистывались, понял, как на кнопку можно текстуру вывести, а можно ли менять только текст кнопок? то есть вместо Back и Next ставить свой текст?
Автор: SotM
Дата сообщения: 10.06.2008 07:44
AlexDJ666
Можно вставить текст в кнопки, для этого нужно смотреть "Руководство по расширенным возможностям Inno Setup 5 (не для чайников) от Kindly".

Код:
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpWelcome then
begin
If WizardForm.FindComponent('NextButton') is TButton
then
TButton(WizardForm.FindComponent('NextButton')).Caption:='Вперед >>>';
If WizardForm.FindComponent('CancelButton') is TButton
then
TButton(WizardForm.FindComponent('CancelButton')).Caption:='Выход';
end;
end;
Автор: AlexDJ666
Дата сообщения: 10.06.2008 11:08
SotM, спасибо, я искал по форуму на предмет текста, нашел способы вставки текстуры или замены самих кнопок, а вот руководство от Kindly не посмотрел, shame on me

В любом случае, спасибо
Автор: SotM
Дата сообщения: 10.06.2008 11:27
AlexDJ666
Хе, тут кстати можно еще проще получить доступ к этим кнопкам:
Код:
WizardForm.CancelButton.Caption := 'Отмена';
WizardForm.NextButton.Caption := 'Далее';
WizardForm.BackButton.Caption := 'Назад';
Автор: alfonser
Дата сообщения: 10.06.2008 13:33
Где-то попадался скрипт для создания "демо" версии, т.е.
1.инсталлятор работает определенное число дней,
2.потом если не найдены определенные параметры реестра выдает сообщение о демо версии
Встречал именно первый пункт, а второй хочу так сделать.
Если кто-то встречал - подскажите, пожалуйста.
Автор: SotM
Дата сообщения: 10.06.2008 14:24
All
Создаю свой инсталят, в InitializeWizard делаю следующую вещь:

ExtractTemporaryFile( '{#Image1}' );
WizardImage := TBitmapImage.Create( WizardForm );
WizardImage.AutoSize := True;
WizardImage.Bitmap.LoadFromFile( ExpandConstant( '{tmp}\' ) + '{#Image1}' )
WizardImage.Parent:=WizardForm

Т.е. загружаю фон для диалога.

Затем отключаю следующие вещи (т.е. точно также как сделаны многие инсталяты, тот же "Руководство по расширенным возможностям Inno Setup 5 (не для чайников) от Kindly", например):
WizardForm.OuterNotebook.Hide
WizardForm.InnerNotebook.Hide

Теперь мне нужно переделывать каждый элемент на каждой странице, что уже в принципе закончено.
Для каждой TLabel я должен ставить теперь Transparent := True, чтобы фоновая картинка нормально отображалась.

Хотел сделать несколько чекбоксов на странице wpSelectDir.
И что делать с TNewCheckListBox или с TCheckBox? У них нет такого 'transparent'
И при использование оных они "затирают" фон сплошным цветом
Это вообще как-то лечится? Или нет?
Автор: serg_aka_lain
Дата сообщения: 10.06.2008 19:17
alfonser

Нуда такой пример есть в Inno Setup Extensions Knowledge Base
[more]




;
[Setup]
AppName=DateTimeStop
AppVerName=DateTimeStop
Uninstallable=false
UpdateUninstallLogAppName=false
DisableDirPage=true
DisableProgramGroupPage=true
DefaultDirName={pf}\DateTimeStop
DisableStartupPrompt=true

[_ISTool]
EnableISX=true


[_Code]


type
TSystemTime = record
wYear : Word;
wMonth : Word;
wDayOfWeek : Word;
wDay : Word;
wHour : Word;
wMinute : Word;
wSecond : Word;
wMilliseconds : Word;
end;


procedure GetLocalTime(var lpSystemTime: TSystemTime); external
'GetLocalTime@kernel32.dll';

//
// compare dt1 and dt2, return false id dt1 is lower than dt2
// thanks to Bruno Gellweiler that provide a working function


function IsOKDateTime( dt1, dt2: TSystemTime ) : Boolean;
begin
Result := true;
if dt2.wYear < dt1.wYear then
result := false
else if dt2.wYear = dt1.wYear then
if dt2.wMonth < dt1.wMonth then
result := false
else if dt2.wMonth = dt1.wMonth then
if dt2.wDay < dt1.wDay then
result := false ;
end;




function InitializeSetup: Boolean;
var
lt, datelimit: TSystemTime;
s, crlf: string;

begin

crlf := #13#10;

// let's say it is not allowed to install after 1 May 2003
datelimit.wYear := 2008;
datelimit.wMonth := 6;
datelimit.wDay := 10;

GetLocalTime(lt);

Result := IsOKDateTime( lt, datelimit );

s := 'Install time limit, it is not possible to install this program.';

if not Result then
    // just to show datetime infos
    MsgBox( s , mbError, MB_OK );

end;

[/more]
Автор: alfonser
Дата сообщения: 10.06.2008 21:59
serg_aka_lain
Спасибо!
А я все не мог вспомнить где видел. Посмотрел, что пояснения на английском и забыл.
Еще раз спасибо!
Автор: Kutsenko
Дата сообщения: 10.06.2008 22:45
Подскажите как можна через Inno Setup сделать следующее:
чтобы один инстал мог запустится только через другой (тоесть через определённый параметр), что нужно писать в скрипт для одного инстаятора и что для другого. Кстати один инстал если его просто попробывать запустить то должна выдаваться ошибка типа: "этот файл должен запускаться только с autorun.exe", или чтото типа этого.
Автор: htuos
Дата сообщения: 10.06.2008 23:38
SotM
можно что-нибудь типа такого замутить

только при таком подходе события назначенные пользователем не будут отрабатывать. например, CheckBox.OnClick
это ехе-шник работающий (1,1мб)

если устроит поищу скрипт, где-то должен быть еще

Добавлено:
Kutsenko
ты сам ответил на свой вопрос
Цитата:
тоесть через определённый параметр

проверяй в InitializeSetup, если нету твоего параметра, то прерывай установку с сообщением
Автор: braunberg
Дата сообщения: 11.06.2008 00:57
Kutsenko
htuos дело говорит так и сделай:

[code]
function InitializeSetup(): Boolean;
begin
If not RegKeyExists(HKLM, 'Software\MyProg')
then
begin
MsgBox('Программа MyProg не установлена или установлена неверно.' #13#13 'Дальнейшая работа мастера невозможна.', mbError, mb_Ok);
Result:=False;
end;
end;
Автор: AlexDJ666
Дата сообщения: 11.06.2008 07:18
Очередной вопрос
Как заставить работать полосу прокрутки в TRichEditViewer? У меня она неактивна.
Автор: SotM
Дата сообщения: 11.06.2008 07:36
htuos
Ага, верно, хотелось бы исходник скрипта глянуть где прозрачность для чекбоксов реализована.
Щас глянул exe файл и сами рисунки. Хмм, я еще вчера думал об этом как это реализовать. Там просто рисуются свои собственные чекбоксы, но всё равно хотелось глянуть на скрипт


Добавлено:
AlexDJ666
Сам я не пробовал использовать TRichEditViewer. А ты смотрел CodeClasses.iss? Вроде там используется этот класс и полоса прокрутки.
Автор: ExpeditorR
Дата сообщения: 11.06.2008 08:02
SotM
А может не заморачиваться с прозрачностью чекбоксов, а просто сузить их чтобы надпись убралась(например checkbox1.width:=15 или типа того) и рядом расположить свои label'ы, а у них с прозрачностью всё гуд.
Автор: AlexDJ666
Дата сообщения: 11.06.2008 08:23
SotM, уже сам разобрался, поиграв с параметрами. Оказывается, чтобы заставить полосу прокрутки не только отображаться, но еще и работать, нужно кроме ScrollBars и жестко прописывать TRichEditViewer := Enabled;
Автор: SotM
Дата сообщения: 11.06.2008 08:45
ExpeditorR
Ну да, об этом я тоже как раз вчера и думал. Хотелось бы попробовать разные варианты и использовать для себя более приемлемый
А вообще странно, что изначально нельзя использовать прозрачность Там наверное теже самые лэйблы и используются.
Автор: htuos
Дата сообщения: 11.06.2008 09:09
SotM
как еще прозрачность у чекбоксов организовать в инно я не знаю, только ручками рисовать, но это достаточно утомительное занятие
а проще тебе наверное будет как сказал ExpeditorR сделать с помощью Label'ов



Добавлено:

Цитата:
А вообще странно, что изначально нельзя использовать прозрачность Там наверное теже самые лэйблы и используются.

вообще-то чекбокс для винды это окно класса BUTTON со стилем BS_CHECKBOX (т.е. по большому счету обычная кнопка), а лэйбл - всего-навсего рисунок, у него и хэндла нету, так что вряд ли скрещивали чекбокс с лэйблом. Хотя в делфи при применении ХР-шного стиля надпись чекбокса становится прозрачной, почему это в инно не реализовали не знаю, правда я не смотрел как это вообще организовано

Кстати можно попробовать WinAPI-шными функциями создать чекбокс, тогда он скорее всего прозрачный будет, хотя не пробовал
Автор: braunberg
Дата сообщения: 11.06.2008 13:34
SotM
В том же руководстве Kindly (инсталлятор) все выглядит очень достойно (на черном фоне два чекбокса). Может тебе стоит сделать что-то подобное?
Автор: SotM
Дата сообщения: 11.06.2008 14:30
braunberg
Ну это я уже пробовал . Я смотрел исходник этого установщика. Оставлю данный метод на самый крайний случай.
Автор: Kutsenko
Дата сообщения: 11.06.2008 14:32
braunberg & htuos
Вы меня наверное неправильно поняли. Пример навиду по игре:
Filename: "{app}\bin\Overdose.exe"; Parameters: "-lscripts LZcripts.pak"; WorkingDir: "{app}\bin\"; Description: "Запустить игру";. Мне нужен тоже какойто строковый параметр, только в примере по нему запускается игра, а мне нужно чтобы один ехе файл сделанный через инно запускал другой ехе файл тоже сделанный через инно, а второй экзэшник сам без того строкового параметра не мог запуститься.
Тоже самое и принцах персии, там идёт запуск игры не через главный ехе файл а тот что рядом. Возможно-ли такое вообще реализовать через инно? Надеюсь теперь я нормально обьяснил то что хочу))).
Автор: SotM
Дата сообщения: 11.06.2008 16:55
Пытаюсь использовать функцию AlphaBlend, и что-то она неправильно рисует. В чем может быть косяк?

[more=Сам порезанный код]

Код:
type
BLENDFUNCTION = record
BlendOp : BYTE;
BlendFlags : BYTE;
SourceConstantAlpha : BYTE;
AlphaFormat : BYTE;
end;

function StretchBlt(DestDC: LongInt; X, Y, Width, Height: Integer; SrcDC: LongInt; XSrc, YSrc, SrcWidth, SrcHeight: Integer; Rop: DWORD): Boolean; external 'StretchBlt@gdi32.dll stdcall';
function BitBlt(DestDC: LongInt; X, Y, Width, Height: Integer; SrcDC: LongInt; XSrc, YSrc: Integer; Rop: DWORD): Boolean; external 'BitBlt@gdi32.dll stdcall';
function AlphaBlend(DestDC: LongInt; X, Y, Width, Height: Integer; SrcDC: LongInt; XSrc, YSrc, SrcWidth, SrcHeight: Integer; BLENDFUNCTION: blendFunction): Boolean; external 'AlphaBlend@msimg32.dll stdcall';

// Следующая функция сильно порезана...
procedure InitializeWizard;
var
BlendFunc : BlendFunction;
begin
WizardForm.OuterNotebook.Hide
WizardForm.InnerNotebook.Hide
WizardForm.Center;

if not BitBlt(BackgroundImage.Bitmap.Canvas.Handle, 100, 0, 100, 100, Image2.Bitmap.Canvas.Handle,
0, 0, SRCCOPY) then
MsgBox( 'Error occured (BitBlt)', mbInformation, mb_Ok );

BlendFunc.BlendOp := AC_SRC_OVER;
BlendFunc.BlendFlags := 0;
BlendFunc.SourceConstantAlpha := 128;
BlendFunc.AlphaFormat := 0;

if not AlphaBlend(BackgroundImage.Bitmap.Canvas.Handle, 0, 0, 100, 100, Image2.Bitmap.Canvas.Handle,
0, 0, 100, 100, BlendFunc) then
MsgBox( 'Error occured (AlphaBlend)', mbInformation, mb_Ok );
end;

Автор: Sampron
Дата сообщения: 11.06.2008 18:23
SotM
Попробуй такой вариант чекбокса (с обработкой событий):
http://data.cod.ru/63523618250
только я слегка запутался в DobleClicks
Автор: ZeN33
Дата сообщения: 11.06.2008 21:12
очень вас прошу залейте русификатор Inno Setup на http://ifolder.ru/ !!!
Буду оч признателен!
Автор: Diawer
Дата сообщения: 11.06.2008 23:11
Подскажите как изменить иконку (большую, которая правее) на странице с прогрессбаром когда идёт деинсталляция
Автор: SotM
Дата сообщения: 11.06.2008 23:46
Diawer
Почитай пару страниц назад, тут уже говорили о смене иконок в разных местах инсталятора.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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