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

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

Автор: 4esnok
Дата сообщения: 31.08.2007 20:02
Всё ясно
Автор: iTASmania_Inc
Дата сообщения: 31.08.2007 20:11
Chanka
Почта, почта и ещё раз почта...
Там же все объяснения!
Unc1e
Кстати, прозрачности можно добиться (но только одного цвета) - и без альфа-канала 'особой' BMP-хи.
Но это кому как удобнее!
Автор: 4esnok
Дата сообщения: 31.08.2007 20:14
Ну например мне надо сделать прозрачным розовый, как осуществить?
Автор: iTASmania_Inc
Дата сообщения: 31.08.2007 20:20
4esnok
Какой именно розовый? В HEX-формате, если можно...
А вообще читаем руководство 5.1 и вот это: http://forum.ru-board.com/topic.cgi?forum=5&topic=23235&start=640#9
Автор: 4esnok
Дата сообщения: 31.08.2007 20:45
Ещё вопрос, как сделать чтобы во время слайд шоу, картинка менялась по мере установки, например на 10% 20, 30 и тд
Автор: iTASmania_Inc
Дата сообщения: 31.08.2007 22:05
4esnok
Не вижу, в чём проблема? Берём расширенный прогрессбар из CoronaSkin от Victor_Dobrov, попутно говорим ему спасибо, а затем по мере изменения индикатора процентов установки - задаём картинку на 10, 20 и так далее процентов.


Добавлено:
Только всё-таки через BeforeInstall и AfterInstall попроще будет, хотя, ИМХО.
Автор: Chanka
Дата сообщения: 31.08.2007 22:16
Прошу помощи

MsgBox(' "'+ExpandConstant('{app}\Bin\'+'XR_3DA.exe')+'".' #13#13
Как в сообщение вставить ExtractFilePath и CurrentFileName тоесть какой сейчас копируется фаил и куда.
Автор: iTASmania_Inc
Дата сообщения: 31.08.2007 22:17
Chanka
А весь код можно?
Автор: Chanka
Дата сообщения: 31.08.2007 22:22
Конечно

Так вот можно ли сделать чтобы в сообщении в место +ExpandConstant('{app}\Bin\'+'XR_3DA.exe') сделать чтобы писался путь и файл который копируется

function NextButtonClick(CurPage: Integer): Boolean;
var
sz:Integer;
begin
Result := True;
if CurPage = 6 then
begin
if FileSize(ExpandConstant('{app}\Bin\XR_3DA.exe'), sz) then
begin
if sz <> 1545208 then
begin
MsgBox('Контрольная сумма для файла "'+ExpandConstant('{app}\Bin\'+'XR_3DA.exe')+'" не совпадает с эталлоной.' #13#13
'Возможно файл не является оригинальным или поврежден.' #13
'Рекомендуеться переустановить игру с оригинального носителя.', mbError, mb_Ok);
WizardForm.Close;
Result := False;
Exit;
end;
end;
end;
end;
Автор: iTASmania_Inc
Дата сообщения: 31.08.2007 22:39
Chanka
Все равно не понял. Там всё пишется. Объясни тупо на пальцах.
Сделал [more=вариант]
function NextButtonClick(CurPage: Integer): Boolean;
var
sz: Integer;
begin
Result := True
if CurPage = 6 then
begin
if FileSize(ExpandConstant('{app}\Bin\XR_3DA.exe'), sz) then
begin
if sz <> 1545208 then
begin
MsgBox('Контрольная сумма для файла "'+ExpandConstant('{app}\Bin\XR_3DA.exe')+'" не совпадает с эталонной.' #13#13
'Возможно файл не является оригинальным или поврежден.' #13
'Рекомендуеться переустановить игру с оригинального носителя.', mbError, mb_Ok)
WizardForm.Close
Result := False
Exit
end
end
else
begin
MsgBox('Файл "'+ExpandConstant('{app}\Bin\'+'XR_3DA.exe')+'" отсутствует.', mbError, mb_Ok)
WizardForm.Close
Result := False
Exit
end
end
end;
[/more], если файл отсутствует.

Добавлено:
Может быть так надо? [more=Пример]
function NextButtonClick(CurPage: Integer): Boolean;
var
sz: Integer;
begin
Result := True
if CurPage = 6 then
begin
if FileSize(ExpandConstant('{app}\Bin\XR_3DA.exe'), sz) then
begin
if sz <> 1545208 then
begin
MsgBox('Контрольная сумма для файла "XR_3DA.exe" в папке "'+ExpandConstant('{app}\Bin')+'" не совпадает с эталонной.' #13#13
'Возможно файл не является оригинальным или поврежден.' #13
'Рекомендуеться переустановить игру с оригинального носителя.', mbError, mb_Ok)
WizardForm.Close
Result := False
Exit
end
end
else
begin
MsgBox('Файл "XR_3DA.exe" отсутствует в папке "'+ExpandConstant('{app}\Bin')+'".', mbError, mb_Ok)
WizardForm.Close
Result := False
Exit
end
end
end;
[/more]
Автор: Chanka
Дата сообщения: 31.08.2007 22:59
iTASmania_Inc
Почти так
Спасибо!
Автор: iTASmania_Inc
Дата сообщения: 31.08.2007 23:02
Chanka

Цитата:
Почти так

А полностью как?
P.S.: Контрольная сумма - это, на мой взгляд, больше на MD5 или CRC32 должно походить, а не на простое указание размера.
Автор: Chanka
Дата сообщения: 31.08.2007 23:07
iTASmania_Inc

Цитата:
А полностью так?

АГА

Цитата:
P.S.: контрольная сумма - это еа мой взгляд больше на MD5 или CRC32 должно походить, а не на простое указание размера.

Можешь помочь с этим. А то я не знаю как. Можно я тебе весь свой код в личку скину чтобы тут не засорять?

Автор: iTASmania_Inc
Дата сообщения: 31.08.2007 23:10
Chanka
Кидай, только я уже завтра погляжу, а то мне ещё в университет ехать - расписание узнавать, а спать хоца.
Автор: Chanka
Дата сообщения: 31.08.2007 23:15
iTASmania_Inc
Спасибо! Мне не к спеху. Так что можешь идти
Автор: Unc1e
Дата сообщения: 01.09.2007 00:19
Victor_Dobrov Corona Skin отказывается корректно отображать видео и аудио карту. Вот скрин http://www.rapidshare.ru/388437. Это недоработка в скрипте или у меня с системой что-то?
Автор: Vygose
Дата сообщения: 01.09.2007 01:50
Сори за ламерский вопрос...
Есть у меня в сетапе такая строка


Код:
[UninstallRun]
Filename: "http://www......com/blabla.php"; Flags: shellexec; RunOnceId: "xxxx"
Автор: Victor_Dobrov
Дата сообщения: 01.09.2007 02:38

Цитата:
Corona Skin отказывается корректно отображать видео и аудио карту

Разберёмся...

Здесь много писали о глюках с RTF, комбо-боксами и прочее при вставке изображения в фон.
Мой вариант решения свободен от этих недостатков:

[Setup]
AppName=Background Image
AppVerName=Background Image
CreateAppDir=false

[Files]
Source: BackgroundImage.bmp; DestDir: embedded; Flags: dontcopy noencryption

[Code]
function ShowWindow(hWnd, nCmdShow: LongWord): LongWord; external 'ShowWindow@user32.dll stdcall';

Procedure BackgroundOnActivate(Sender: TObject); Begin if WizardForm.Visible then WizardForm.Show End;

Procedure InitializeWizard;
var BackgroundForm: TForm; BackgroundImage: TBitmapImage;
    Begin
BackgroundForm:= TForm.Create(nil)
    BackgroundForm.BorderStyle:= bsNone
    BackgroundForm.OnActivate:= @BackgroundOnActivate;
    ShowWindow(BackgroundForm.Handle, sw_ShowMaximized)    // фоновое окно на полный экран
BackgroundImage:= TBitmapImage.Create(BackgroundForm)
    BackgroundImage.Align:= alClient
    BackgroundImage.Stretch:= True
    ExtractTemporaryFile('BackgroundImage.bmp')
    BackgroundImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\BackgroundImage.bmp'))
    BackgroundImage.Parent:= BackgroundForm
end;

Добавлено:
Unc1e, запусти Корону, нажми клавишу A(ф). В окошке истории должна быть строка 'Видеоадаптер и звуковые карты определяются через API'. Я недавно обновил скрипт, у тебя последняя версия?
Автор: Sampron
Дата сообщения: 01.09.2007 03:08
Victor_Dobrov
Если нажать мышой на фоновом окне то WizardForm исчезает.

Добавлено:
Есть ещё такой вариант но его нужно доработать, после установки выдаёт ошибку.

[Files]
Source: BackImage.bmp; DestDir: {tmp}; Flags: dontcopy;

[Code]
function ShowWindow(hWnd: LongWord; nCmdShow: LongWord): LongWord;
external 'ShowWindow@user32.dll stdcall';

procedure FormOnActivate(Sender: TObject);
begin
WizardForm.Show
end;

procedure InitializeWizard();
var
Form: TForm;
BackImage: TBitmapImage;
begin
ExtractTemporaryFile('BackImage.bmp')
Form:=CreateCustomForm()
Form.BorderStyle:=bsNone
Form.Color:=clBlack
ShowWindow(Form.Handle, SW_SHOWMAXIMIZED)
Form.OnActivate:=@FormOnActivate
BackImage:=TBitmapImage.Create(Form)
BackImage.Align:=alClient
BackImage.Stretch:=True
BackImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\BackImage.bmp'))
BackImage.Parent:=Form
end;
Автор: Victor_Dobrov
Дата сообщения: 01.09.2007 04:24

Цитата:
Если нажать мышой на фоновом окне то WizardForm исчезает.

Исправил код скрипта, см. там же...
Автор: omals
Дата сообщения: 01.09.2007 09:20
Vygose
не уверен что именно то шо нужно но пробовать можно


Код: #define MyVer GetFileVersion('..\app\myprog.exe')
;; если же нужно задавать версию, то
;; #define MyVer "1.0.0.28"

[Setup]
VersionInfoVersion={#MyVer}

[INI]
Filename: "{app}\uninstall.url"; Section: "InternetShortcut"; Key: "URL"; String: "http://www......com/blabla.php";

[Code]
procedure CreateURL();
var
myString, m1:string;
begin
m1:=ExpandConstant('{#MyVer}');
myString := 'http://www......com/blabla.php';
myString := myString + '\' + m1 + '\добавляем все шо нужно';
SetIniString('InternetShortcut', 'URL', myString, ExpandConstant('{app}\uninstall.url'));
end;

function InitializeUninstall(): Boolean;
var
ErrorCode: Integer;
begin
CreateURL;
Result:=True;
ShellExec('', ExpandConstant('{app}\uninstall.url'),'', '', SW_SHOW, ewNoWait, ErrorCode);
end;
Автор: Victor_Dobrov
Дата сообщения: 01.09.2007 09:40
Слайдшоу Устранил ошибку, из-за которой инсталлятор долго закрывался, спасибо Genri. При клике на фоновой картинке инсталлятор больше не исчезает. RTF, комбо-боксы и прочее отображаются нормально. В архиве 5 скриптов: 1) фоновый рисунок 2) слайдшоу 3) скринсевер 4) системные скринсэверы 5) проигрывание AVI-файла в фоне.
Автор: Unc1e
Дата сообщения: 01.09.2007 10:16
Victor_Dobrov

Цитата:
В окошке истории должна быть строка 'Видеоадаптер и звуковые карты определяются через API'. Я недавно обновил скрипт, у тебя последняя версия?

Да, самая последняя.
Автор: Victor_Dobrov
Дата сообщения: 01.09.2007 11:44
Unc1e, потестируй вот [more=этот небольшой скрипт]
[Setup]
AppName=GetDeviceInfo
AppVerName=GetDeviceInfo
CreateAppDir=false

[Code]
type
    TWaveOutCaps = record vPid, vDriverVersion: DWord; sName: array[0..31] of Char; Formats: DWord; Channels: Word; Support: DWord; end; PDisplay_Device = record cb: DWord; DeviceName: array[0..31] of Char; DeviceString: array[0..127] of Char; StateFlags: DWord; DeviceID, DeviceKey: array[0..127] of Char; end;
Const
    oneMB= 1024*1024; DISPLAY_DEVICE_PRIMARY_DEVICE = 4;
var
    Report: String; n, errCode: Integer; lpCaps: TWaveOutCaps; lpDisplayDevice: PDisplay_Device; DeviceValue: Cardinal; VideoName, SoundName, MixerName, DeviceKey: String; Keys: TArrayOfString;

function EnumDisplayDevices(lpDevice, iDevNum: DWord; var lpDisplayDevice: PDisplay_Device; dwFlags: DWord):Boolean; external 'EnumDisplayDevicesA@user32.dll stdcall';
function waveOutGetDevCaps(uDeviceID: LongInt; var lpCaps: TWaveOutCaps; uSize: LongInt): LongInt; external 'waveOutGetDevCapsA@winmm.dll stdcall';
function waveOutGetNumDevs: Integer; external 'waveOutGetNumDevs@winmm.dll stdcall';
function mixerGetDevCaps(uDeviceID: LongInt; var lpCaps: TWaveOutCaps; uSize: LongInt): LongInt; external 'mixerGetDevCapsA@winmm.dll stdcall';
function mixerGetNumDevs: Integer; external 'mixerGetNumDevs@winmm.dll stdcall';

Function InitializeSetup: Boolean;
Begin
{video}
    lpDisplayDevice.cb:= SizeOf(lpDisplayDevice);
    n:= 0; while not (EnumDisplayDevices(0, n, lpDisplayDevice, 0) and (lpDisplayDevice.StateFlags and DISPLAY_DEVICE_PRIMARY_DEVICE > 0)) and (n < 127) do n:= n +1
    for n:= 0 to 127 do
        DeviceKey:= DeviceKey + lpDisplayDevice.DeviceKey[n]; Delete(DeviceKey, Pos(Chr(0), DeviceKey), 127);    { ключ драйвера получаем из API }
        StringChange(DeviceKey,'\Registry\Machine\',''); errCode:= 1; DeviceValue:= 0;        { объём видеопамяти }
        RegQueryBinaryValue(HKLM, DeviceKey, 'HardwareInformation.MemorySize', VideoName)    { проверку 9х или NT не делаю }
        for n:= 1 to Length(VideoName) do
        begin
            DeviceValue:= DeviceValue + Ord(VideoName[n]) *errCode; errCode:= errCode * $100; end;
            VideoName:= ''; for n:= 0 to 127 do VideoName:= VideoName + lpDisplayDevice.DeviceString[n]; Delete(VideoName, Pos(Chr(0), VideoName), 127);
            if VideoName <> '' then
                if DeviceValue > 0 then VideoName:= VideoName +', '+ IntToStr(DeviceValue/oneMB) + 'Mb' else VideoName:= VideoName +' (стандартный драйвер)'
            else VideoName:= 'Ошибка драйвера или оборудования'
{sound}
    for errCode:= 0 to waveOutGetNumDevs do begin
        waveOutGetDevCaps(errCode-1, lpCaps, SizeOf(lpCaps)); SoundName:=''
        for n:= 0 to 31 do SoundName:= SoundName + lpCaps.sName[n]; Delete(SoundName, Pos(Chr(0), SoundName), 31);
        SetArrayLength(Keys, errCode+1); if errCode+1 > 0 then Keys[errCode]:= SoundName
    end;
SoundName:= #9
    if errCode > 0 then
        for n:= 0 to GetArrayLength(Keys) -1 do
        SoundName:= SoundName + Keys[n] + #13#10#9
    else SoundName:= #9 'Звуковые устройства не обнаружены'

{mixer}
    for errCode:= 0 to mixerGetNumDevs do begin
        mixerGetDevCaps(errCode-1, lpCaps, SizeOf(lpCaps)); MixerName:=''
        for n:= 0 to 31 do MixerName:= MixerName + lpCaps.sName[n]; Delete(MixerName, Pos(Chr(0), MixerName), 31);
        SetArrayLength(Keys, errCode); if errCode > 0 then Keys[errCode-1]:= MixerName
    end;
MixerName:= #9
    if errCode > 0 then
        for n:= 0 to GetArrayLength(Keys) -1 do
        MixerName:= MixerName + Keys[n] + #13#10#9
    else MixerName:= #9 'Звуковые устройства не обнаружены'

    Report:= 'Video: '#9 + VideoName + #13#10 'Key: '#9 + DeviceKey + #13#10#13 'SoundCards: '#13#10 + SoundName + #13#10 'MixerDev: '#13#10 + MixerName
MsgBox(Report, mbInformation, mb_Ok)
    SaveStringToFile('Report.txt', Report, True);
End;
[/more], в котором исправлено определение видеокарты.

Данный скрипт создаёт файл Report.txt, отпиши, что в нём...
Автор: Unc1e
Дата сообщения: 01.09.2007 13:58
Victor_Dobrov

Цитата:
исправлено определение видеокарты.

Теперь все работает! и видео и аудио карта определились правильно:

Цитата:
Video:     NVIDIA GeForce 6600 (стандартный драйвер)
Key:     System\CurrentControlSet\Control\Video\{1EE8547A-2B40-487F-87E9-2707BBE01D7C}\0000

SoundCards:
    Динамики (C-Media High Definiti
    Динамики (C-Media High Definiti

А аудио так и определяется, даже через get_hw_caps.dll
Автор: Victor_Dobrov
Дата сообщения: 01.09.2007 15:28
Corona Skin & Check System Requirements Устранил недоработку при определении видеокарт со стандартными драйверами. Добавил слайдшоу, оно запустится, если найдена папка Slides рядом с инсталлятором. на BevelLabel можно кликать правой кнопкой

Unc1e
Скорее всего у тебя не установлены дрова на видео и звук, используются стандартные вистовские, советую установить драйвер хотя бы для видеокарты.
Автор: Unc1e
Дата сообщения: 01.09.2007 17:10
Victor_Dobrov

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

Дрова у меня стоят свежие. Правда на звук предназначены под ХР, но ставятся без проблем.
Автор: Vygose
Дата сообщения: 01.09.2007 17:55
omals
omg, как сложно спасибо
Автор: omals
Дата сообщения: 01.09.2007 17:59
Vygose
ну сорь
может и есть путь попроще
сходу написал как можно сделать

правда сейчас подумал, что файл {app}\uninstall.url при заканчивании инсталяции нужно будет удалить самому
ешо несколько строк кода

Автор: iTASmania_Inc
Дата сообщения: 01.09.2007 20:02
Chanka
Проверь почту!

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

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


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