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

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

Автор: ssv14
Дата сообщения: 08.09.2007 00:09
я уже сделал, прикрутил кнопки для MP3, а для трекерной пока только галка вкл.выкл. Спасибо за ссылку
Автор: iTASmania_Inc
Дата сообщения: 08.09.2007 11:13
ssv14
Код выше - это проигрывание трекерной музыки с кнопками управлениями.
Так к слову...
Автор: iTASmania_Inc
Дата сообщения: 08.09.2007 16:00
Victor_Dobrov
У нас в университете есть одна машинка с 480Мб ОЗУ. Everеst показывает память как раз в 480Мб, а скрипт Corona - в 512Мб. Что правильнее?

И ещё вопрос:
P.S.: Звуковые карты:
SoundMAX HD(1) Модем №0, линейный выход(2) HD(3)
Можно ли как-нибудь убрать модем?
Автор: Victor_Dobrov
Дата сообщения: 08.09.2007 17:49
Corona Skin Добавлена страница выбора вариантов деинсталляции. При определении объёма памяти используется 64-битная адресация (не работает на Win9x). Если на BeveledLabel щёлкнуть правой кнопкой мыши, показывается окно About/History.

Цитата:
480 или 512. Что правильнее?

Если кэшируется БИОС или встроенная видеокарта, функции API возвращают меньшее кол-во общей памяти. Ты сам мне писал: при определении оперативки вместо 1 Гб - 1022Мб. В короне память считается кратной 64Мб, но пожалуй надо заменить ToMultiple(TotalRAM, 64) на ToMultiple(TotalRAM, 4)
Автор: iTASmania_Inc
Дата сообщения: 08.09.2007 17:56
Victor_Dobrov

Цитата:
пожалуй надо заменить

Да, сам хотел попробовать, только проверить негде. Спасибо!
Автор: Victor_Dobrov
Дата сообщения: 08.09.2007 18:01
По звуку - попробуй в своём SysInfo.iss или Corona_kernel.iss заменить:
waveOutGetNumDevs > waveInGetNumDevs
waveOutGetDevCaps > waveInGetDevCaps

Добавлено:
Desktop Tweaks
При сборке этого пакета я использовал свой Corona Skin.
Автор: iTASmania_Inc
Дата сообщения: 08.09.2007 18:31
Victor_Dobrov
А можно значения секции [Registry] из пакета Desktop Tweaks получить?
Уже не надо. Думал инсталл запаролен. Оказалось, нет.
Автор: Dimbay
Дата сообщения: 08.09.2007 23:29
Ребят,ну подскажите,кто-нибудь.
Автор: Victor_Dobrov
Дата сообщения: 09.09.2007 02:55
Dimbay, попробуй в секции [Run] заменить первую строку на вторую:
FileName: move {app}\data\sounds\*.* {app}\dimbay\data\sounds\*.*; Flags: shellexec nowait

Filename: {cmd}; Parameters: /C move data\sounds\*.* dimbay\data\sounds\*.*; WorkingDir: {app}; Flags: nowait runhidden

iTASmania_Inc
Corona Skin - Модемы в звуковых устройствах больше не показываются (заменил waveOutGetDevCaps > mixerGetDevCaps)
P.S. Если unins???.exe не найден, выбор на странице деинсталляции будет другим
Автор: iTASmania_Inc
Дата сообщения: 09.09.2007 09:37
Victor_Dobrov

Цитата:
Модемы в звуковых устройствах больше не показываются

СПАСИБО!
Автор: RazDray
Дата сообщения: 09.09.2007 10:06
serg_aka_lain
Спасибо, но это не совсем то. Или я задачу не совсем верно обрисовал.
Твой код проверяет наличие записей в реестре, но при их обнаружении нужно еще и считать путь к программе.

Форма записи в реестре такая -

[HKEY_LOCAL_MACHINE\SOFTWARE\Company\ProgramName]
"WorkDir"="C:\\program files\\ProgramName"
или
[HKEY_CURRENT_USER\SOFTWARE\Company\ProgramName]
"WorkDir"="C:\\program files\\ProgramName"

И так 8 раз, на 8 вариантов названий программы (ProgramNamePro, ProgramNameStandard и т.д.). Итого 16 ключей.

И нужно ещё и считать значение из ключа "WorkDir" и передать его в "DefaultDirName"
А если не один из 16 вариантов не найден, то предложить выбрать путь самостоятельно.

Вот такая вот ситуёвина.
Автор: serg_aka_lain
Дата сообщения: 09.09.2007 14:32
RazDray

Разве фукция GetInstallDir не передаёт значения реестра

[more]
function GetInstallDir( AppID: String ): string;
var Dir: string;
begin
Dir:= '';
if not RegQueryStringValue(HKLM, 'SOFTWARE\Company\ProgramNamePro',
'WorkDir', Dir) then
RegQueryStringValue(HKLM, 'SOFTWARE\Company\ProgramNameLight',
'WorkDir', Dir);
Result:= Dir;
end;

Дописываем хоть сто ключей типа if not RegQueryStringValue (....) then
и передаём в DefaultDirName={code:GetInstallDir}

function InitializeSetup(): Boolean;
begin
Result:=True;
if not RegKeyExists(HKLM, 'SOFTWARE\Company\ProgramNamePro') then
begin
if not RegKeyExists(HKLM, 'SOFTWARE\Company\ProgramNameLight') then
begin
MsgBox('Программа установки не смогла обнаружить "ProgramName"!' #13#13
'Укажите путь к прграмме самостоятельно.', mbInformation, mb_ok);
end
end
end;

дописываем необходимые ключи if not RegKeyExists(....) then begin

(первое обнаруженое значение будет передано в DefaultDirName)
[/more]
Автор: Victor_Dobrov
Дата сообщения: 09.09.2007 15:13
Corona Skin & Check System Requirements
Небольшие доработки интерфейса Фоновое окно можно скрывать/показывать, нажимая клавишу S(ы). Можно скрыть/показать Мастер установки, щёлкая левой кнопкой мыши по фону.
Автор: RazDray
Дата сообщения: 09.09.2007 16:55
serg_aka_lain
Цитата:
Разве фукция GetInstallDir не передаёт значения реестра

Да, действительно (:
Спасибо! Теперь эта часть инсталлятора работает как надо!

Вот сейчас только пытаюсь сообразить, можно ли выдавать сообщение о том, что программа не найдена на том этапе, когда появляется экран с указанием пути установки.
Потому, что сейчас оно появляется в начале инсталляции, потом идёт экран с лицензией, потом с данными пользователя и только потом экран с выбором пути. Немного не логично, на мой взгляд, но "переместить" его пока не получилось ):
Автор: iTASmania_Inc
Дата сообщения: 09.09.2007 17:07
RazDray
А вместо InitializeSetup разве это нельзя прописать?
[more=Подробнее]
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then
if not RegKeyExists(HKLM, 'SOFTWARE\Company\ProgramNamePro') then
begin
if not RegKeyExists(HKLM, 'SOFTWARE\Company\ProgramNameLight') then
begin
MsgBox('Программа установки не смогла обнаружить "ProgramName"!' #13#13
'Укажите путь к прграмме самостоятельно.', mbInformation, mb_ok);
end
end
end;
[/more]
Автор: serg_aka_lain
Дата сообщения: 09.09.2007 17:14
RazDray

После нажатия 'Далее' на странице UserInfoPage?
то сообщение можно выести так
(один из вариантов)

[more]

function NextButtonClick(CurPage: Integer): Boolean;
begin
Result:=True;
If CurPage=5 then
begin
if not RegKeyExists(HKLM, 'SOFTWARE\Company\ProgramNamePro') then
begin
if not RegKeyExists(HKLM, 'SOFTWARE\Company\ProgramNameLight') then
begin
MsgBox('Программа установки не смогла обнаружить "ProgramName"!' #13#13
'Укажите путь к программе самостоятельно.', mbInformation, mb_ok);
end
end
end
end;

страница UserInfoPage должна быть активной.
[/more]
Автор: RazDray
Дата сообщения: 09.09.2007 17:47
iTASmania_Inc, serg_aka_lain
Спасибо, попробую.

А пока чисто теоретический вопрос.
Получается, что идёт две почти одинаковых проверки ключей в реестре. Есть ли препятствия для их объединения?
Т.е. сообщение о том, что программа не найдена, выдавать по результату работы функции GetInstallDir.

Мысль пришла, но попробовать пока не успел (:


Да, и совсем ламерский вопрос - как использовать апостроф в тексте? Например в слове "cann't". Компилятор принимает его за окончание строки
Автор: iTASmania_Inc
Дата сообщения: 09.09.2007 17:57
RazDray

Цитата:
совсем ламерский вопрос

Совсем ламерский ответ - удваиваем.
Пример: I can''t believe!
Автор: serg_aka_lain
Дата сообщения: 09.09.2007 18:41
RazDray

Объеденить можно, с использованием страницы UserInfoPage
тут.

[more]
DefaultDirName={code:GetInstallDir}
код

var Dir: string;
//переменная Dir: объявляется глобально,
//т.к. вызывается из разных функций.

function GetInstallDir( AppID: String ): string;
begin
Dir:= '';
if not RegQueryStringValue(HKLM, 'SOFTWARE\Company\ProgramNamePro',
'WorkDir', Dir) then
RegQueryStringValue(HKLM, 'SOFTWARE\Company\ProgramNameLight',
'WorkDir', Dir);
Result:= Dir;
end;


function NextButtonClick(CurPage: Integer): Boolean;
begin
Result:=True;
If CurPage=5 then
begin
if Dir = '' then
begin
MsgBox('Программа установки не смогла обнаружить "ProgramName"!' #13#13
'Укажите путь самостоятельно.', mbInformation, mb_ok);
end
end
end;

[/more]
Автор: iTASmania_Inc
Дата сообщения: 09.09.2007 23:12
[Удалено]
Автор: OrenAlexI
Дата сообщения: 10.09.2007 06:45
Есть кусок реестра, надо чтобы при инсталле он импоритровался (я знаю что есть секция регистри и т.д., прост овы с начала гляньте на этот кусок, не получаеться чо-то у меня)
подскажитепрактически, заране спасибо. Вот реестр - http://dump.ru/files/j/j9668527256/

Автор: namchik
Дата сообщения: 10.09.2007 07:12
OrenAlexI
нехилый такой кусок реестра... )))

Как вариант - через
[Run]
Filename: "regedit.exe"; Parameters: "/s {app}\crack.reg"
Автор: OrenAlexI
Дата сообщения: 10.09.2007 08:10
Спсибо.. )) вот из-за того что он не хилый я и смутился.. спсибоза падсказку))
Автор: Sid007
Дата сообщения: 10.09.2007 08:38
Парни, никто не подкинет ссылочку на файл innocallback.dll.
Заранее спасиба!!!
Автор: iTASmania_Inc
Дата сообщения: 10.09.2007 08:59
Sid007
http://www.rapidshare.ru/395974
Вообще-то эта библиотека в Corona Skin есть...
Автор: Sid007
Дата сообщения: 10.09.2007 09:14

Цитата:
Вообще-то эта библиотека в Corona Skin есть...


А ну тогда понятно, просто я его не качал... За ссылку спасиба, а замечание учту.

Добавлено:
Возник вопрос, добавляю в установку слайд-шоу - рисунки 800х600, инно растягивает их во весь экран. Подскажите как сделать, чтобы инно показывал рисунки реального размера (допустим 800х600) и размещал их по центру.
Автор: Chuvakstepan
Дата сообщения: 10.09.2007 10:02
Sid007

Код: const
BACKGROUND = 5; // "5"-по центру, "6"-растянуто на весь экран, "1,2,3,4"-в разных углах экрана
TIMER = 16;
Автор: Sid007
Дата сообщения: 10.09.2007 10:36
Chuvakstepan

Вношу поправку... Не фоновый рисунок, а именно слайд-шоу (BACKGROUND = 5 не работает). Тут скорей всего нужна секция [Code], а как это сделать - не знаю.
Автор: Chuvakstepan
Дата сообщения: 10.09.2007 10:40
Sid007
В руководстве от Kindly есть пример слайдшоу через библиотеку
Надо заменить в нём (да, да в секции Code):

Код: const
BACKGROUND=6;
TIMER=16;
Автор: Sid007
Дата сообщения: 10.09.2007 11:20
Скажу по другому, я использую слайд-шоу (рисунки 800х600). Слайд-шоу построено не на времени, а на процентах (когда-то тут он был). Пример Kindly не подходит под это дело. А другого нет способа?

P.S. А может быть я чё-то не так делаю.

Добавлено:
[more]
Может быть сам код поможет... Вот он.
[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>10) and (percent<20) and (Tag<>2)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\2.bmp')
Tag:=2
end else
if ((percent>20) 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;
[/more]

Добавлено:
Чуть выше добавил код {Подробнее...}

Добавлено:
Кстати позаимствовал я его отсюда, автора, к сожалению, не помню.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Mail.ru агент - вход не выполнен


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