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

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

Автор: Genri
Дата сообщения: 25.06.2008 15:57
ExpeditorR

Цитата:
почему-то возвращается пустая строка.
-- а что должно возвращаться ? Строку 'Это пример' возвращает функция (т.е. это ее результат). Но в процедуре InitializeWizard ты результат ничему не присваиваешь, а выводишь пустую f.
Вероятно, имелось ввиду:
MsgBox(mesag(f), mbInformation, MB_OK);
Автор: ExpeditorR
Дата сообщения: 25.06.2008 17:58
Genri
Млин, ну я и стормозил)))
Сейчас пришёл домой, прочитал и чуть со смеха не лопнул, как я так мог))
Ещё раз убедился, что на работе нужно работать, а не программы писать (хотя это мне больше нравится)
Автор: Genri
Дата сообщения: 25.06.2008 18:05
ExpeditorR -- надеюсь, работаешь не програмером
Кстати, пример написания длл есть в примерах: ...\Examples\MyDll\Delphi\MyDll.dpr
Автор: 999Kay666
Дата сообщения: 25.06.2008 19:36
Genri
Лищний миллиард нервных клеток и вуаля - вставил таки, в свой код по твоему примеру пропуск страници. Спасибо ОгРоМноЕ.

Но ты не сказал как быть с кнопками: Если компонент выбран - "далее", если нет - "установить". Я попробовал, но чегото не хватает. Помоги....

код:
If CurPageID=wpSelectComponents then
begin
if not IsComponentSelected('help') then WizardForm.NextButton.Caption:='&USTANOVKA'
if IsComponentSelected('help') then WizardForm.NextButton.Caption:='&DALEE'

...почему-то DALEE пишется, только если вернуться на страницу SelectComponents со следующей или предыдущей страниц.
Автор: elapse
Дата сообщения: 25.06.2008 21:44
999Kay666, CurPageChanged не подходит для изменения содержимого страницы без перехода на предыдущую/следующую. Попробуте [more=так][no]
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program

[Components]
Name: "main"; Description: "Main Files"; Types: full custom; Flags: fixed;
Name: "help"; Description: "Help Files"; Types: full;

[Code]
procedure ComponentsListOnClickCheck(Sender: TObject);
begin
if IsComponentSelected('help') then
WizardForm.NextButton.Caption := '&Далее'
else
WizardForm.NextButton.Caption := '&Установка';
end;

procedure InitializeWizard();
begin
WizardForm.ComponentsList.OnClickCheck := @ComponentsListOnClickCheck;
end;[/no]
[/more]. Подкорректируете под себя, заодно и пригодится CurPageChanged для "сохранения" текущего названия кнопок.
Автор: Genri
Дата сообщения: 25.06.2008 22:53
999Kay666 -- я не совсем понял - вариант с пропуском страниц и перемещением по нажатию "Далее" на страницу wpReady (где на кнопке штатным образом отображается "Установить"), тебя не устраивает? Ты все-таки хочешь, чтобы при невыбранном компоненте при нажатии на кнопку сразу начиналась установка? Без отображения страницы wpReady? Не думаю, что есть смысл скрывать страницу wpReady без объективных причин (тем более, что это несет за собой усложнение скрипта).
Т.е. скажем так: зачем? Зачем надо скрывать wpReady?
Автор: boss911
Дата сообщения: 26.06.2008 06:20
Правильно (корректно) ли я указал:

Код: [Setup]
MinVersion=0,5.01.2600sp2
Автор: serg_aka_lain
Дата сообщения: 26.06.2008 07:21
boss911

Цитата:
только на WinXP?


А XP Professional или хомяк имеет значение?
И Vista тоже пролетает.
Автор: SotM
Дата сообщения: 26.06.2008 07:25
boss911

Цитата:
Правильно (корректно) ли я указал:

В хелпе написано

Цитата:
Examples:
5.0.2195
5.0sp1
5.0.2195sp1

Значит правильно.

Щас нашел через поиск: тот же вопрос. И его задавал ты еще 1 год назад.
Автор: serg_aka_lain
Дата сообщения: 26.06.2008 07:39
boss911

Цитата:
А так же, как задать, чтобы приложение могло устанавливаться только на WinXP?


OnlyBelowVersion=0,5.02
Автор: AlexDJ666
Дата сообщения: 26.06.2008 13:21
И снова здравствуйте

Добиваю-таки свой инсталлятор, теперь осталось сделать только увеличенный скриншот.
Для этого создаю форму для проверки TLabel, совпадающую с BitmapImage. Теперь требуется отследить нажатия на эту форму и при нажатии вывести в центре экрана блок TMemo или просто BitmapImage с картинкой внутри. Как это сделать?

Сейчас вот так:


Код:
CheckLabel222:= TLabel.Create(Page2);
with CheckLabel222 do
    begin
        Left := 250;
        Top := 305;
        Width := 288;
        Height := 40;
        Autosize :=False;
        Transparent :=True;
        OnMouseMove :=???;
        OnClick :=???;
        Parent := Page2.Surface;
        Cursor := 1;
    end;
        
Bmp2 :=TBitmapImage.Create(WizardForm)
Bmp2.SetBounds (250,0,290,305)
Bmp2.AutoSize :=False
Bmp2.BackColor :=$cccccc
Bmp2.Parent :=Page2.Surface
Автор: nOobCrafter
Дата сообщения: 26.06.2008 14:45
Приветствую, такой вопрос, как можно сделать что бы при инсталяции софтины, происходила проверка наличия одной из папок и если данная присутствует то ее бы предлагалось или оставить или заменить или переименовать. так же можно ли вкинуть окошко с предложением указания расположения ключа, причем ключ явл. не числовой комбинацие которую мона было бы ввести вручную а обычным рег. файлом?.. Кто нить пользовался таким, или делал что нить похожее...?
например папка с хистори..
Автор: braunberg
Дата сообщения: 27.06.2008 11:23
AlexDJ666
Сплеш устроит при клике по картинке? [more=скрипт]
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program

[Files]
Source: AdvSplash.dll; DestDir: {tmp}; Flags: dontcopy
Source: callnsis.dll; DestDir: {tmp}; Flags: dontcopy
Source: compiler:WizModernSmallImage.bmp; DestDir: {tmp}; Flags: dontcopy
Source: compiler:WizModernImage.bmp; DestDir: {tmp}; Flags: dontcopy
Source: compiler:WizModernSmallImage-IS.bmp; DestDir: {tmp}; Flags: dontcopy
Source: compiler:WizModernImage-IS.bmp; DestDir: {tmp}; Flags: dontcopy

[Code]
var
Page: TWizardPage;
P1,P2: TPanel;
Image1,Image2: TBitmapImage;
L1,L2: TLabel;

procedure callplug(parentwnd: Integer; pluginname,funcname,param1,param2,param3,param4,param5,param6,param7,param8,param9,param10: PChar);
external 'callplug@files:callnsis.dll stdcall';

////////// Delay=3000; FadeIn=50; FadeOut=0; Transparent=-1 (время в милисекундах, прозрачность не используется)

procedure OnClick1(Sender: TObject);
begin
ExtractTemporaryFile('WizModernImage.bmp')
ExtractTemporaryFile('AdvSplash.dll')
callplug(0,ExpandConstant('{tmp}\AdvSplash.dll'),'show','3000','50','0','-1',ExpandConstant('{tmp}\WizModernImage'),'','','','','')
end;

procedure OnClick2(Sender: TObject);
begin
ExtractTemporaryFile('WizModernImage-IS.bmp')
ExtractTemporaryFile('AdvSplash.dll')
callplug(0,ExpandConstant('{tmp}\AdvSplash.dll'),'show','3000','50','0','-1',ExpandConstant('{tmp}\WizModernImage-IS'),'','','','','')
end;

procedure InitializeWizard();
begin
Page:=CreateCustomPage(2, 'Выбор компонентов установки', 'Просмотрите описание компонентов, которые вы хотите установить.')

ExtractTemporaryFile('WizModernSmallImage.bmp');
ExtractTemporaryFile('WizModernSmallImage-IS.bmp');

P1:=TPanel.Create(Page)
P1.SetBounds(0,0,55,55)
P1.Enabled:=False
P1.Parent:=Page.Surface;

P2:=TPanel.Create(Page)
P2.SetBounds(0,P1.Height+10,55,55)
P2.Enabled:=False
P2.Parent:=Page.Surface;

Image1:=TBitmapImage.Create(Page);
Image1.SetBounds(0,0,55,55);
Image1.Bitmap.LoadfromFile(ExpandConstant('{tmp}\WizModernSmallImage.bmp'));
Image1.Parent:=P1;

Image2:=TBitmapImage.Create(Page);
Image2.SetBounds(0,0,55,55);
Image2.Bitmap.LoadfromFile(ExpandConstant('{tmp}\WizModernSmallImage-IS.bmp'));
Image2.Parent:=P2;

L1:=TLabel.Create(Page)
L1.SetBounds(P1.Left,P1.Top,P1.Width + 2,P1.Height)
L1.AutoSize:=False
L1.Transparent:=True
L1.OnClick:=@OnClick1
L1.Cursor:=crHand
L1.Parent:=P1.Parent

L2:=TLabel.Create(Page)
L2.SetBounds(P2.Left,P2.Top,P2.Width + 2,P2.Height)
L2.AutoSize:=False
L2.Transparent:=True
L2.OnClick:=@OnClick2
L2.Cursor:=crHand
L2.Parent:=P2.Parent
end;
[/more]
Автор: AlexDJ666
Дата сообщения: 27.06.2008 12:14
А что за AdvSplash.dll и callnsis.dll? И где их взять?
Автор: nOobCrafter
Дата сообщения: 27.06.2008 12:45
Возник вопрос со скриптом..

[more=код...][Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName=C:\innosetup\output

[Files]
Source: "compiler:Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usDone then


begin
DelTree(ExpandConstant('{app}\dbo'), True, False, False)
if DirExists(ExpandConstant('{app}\dbo')) then
begin
if MsgBox('Удалить конфигурацию объекта?',mbconfirmation, mb_yesno) = IDYES then
begin
DelTree(ExpandConstant('{app}\dbo'), True, True, True)
end
end
else
CreateDir(ExpandConstant('{app}\dbo'))
end

begin
DelTree(ExpandConstant('{app}\dbs'), True, False, False)
if DirExists(ExpandConstant('{app}\dbs')) then
begin
if MsgBox('Удалить конфигурацию извещений?',mbconfirmation, mb_yesno) = IDYES then
begin
DelTree(ExpandConstant('{app}\dbs'), True, True, True)
end
end
else
CreateDir(ExpandConstant('{app}\dbs'))
end

begin
DelTree(ExpandConstant('{app}\img'), True, False, False)
if DirExists(ExpandConstant('{app}\img')) then
begin
if MsgBox('Удалить фотографии пользователей?',mbconfirmation, mb_yesno) = IDYES then
begin
DelTree(ExpandConstant('{app}\img'), True, True, True)
end
end
else
CreateDir(ExpandConstant('{app}\img'))
end
end;[/more]

по исполнению получается так что, происходит второй, третье действие, потом удаление программы, потом спрашивается первое и его удаляет, хотя хотелось бы что бы если и не по порядку то хотя бы все менюшки выплывали до удаления проги.. где я тут апшибся?..
Так же при добавлении куска начиная с [Code]... в основной код, компилятор начинает ругаться мол

Column 11:
Dublicate identifier 'CurUninstallStepChanged'
Вродь так все...( И в простом варианте нормально работает правда как писал выше есть небольшой нюанс
Автор: SotM
Дата сообщения: 27.06.2008 13:17
2nOobCrafter
Сразу же смутило куча лишних begin/end'ов.
У меня всё нормально скомпилилось. Значит у тебя где-то есть дубликат этой функции.
Вот твой код, только с лучшим форматированием [more]
Код:
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usDone then
begin
DelTree(ExpandConstant('{app}\dbo'), True, False, False)
if DirExists(ExpandConstant('{app}\dbo')) then
begin
if MsgBox('Удалить конфигурацию объекта?',mbconfirmation, mb_yesno) = IDYES then
begin
DelTree(ExpandConstant('{app}\dbo'), True, True, True)
end
end
else
CreateDir(ExpandConstant('{app}\dbo'))

DelTree(ExpandConstant('{app}\dbs'), True, False, False)
if DirExists(ExpandConstant('{app}\dbs')) then
begin
if MsgBox('Удалить конфигурацию извещений?',mbconfirmation, mb_yesno) = IDYES then
begin
DelTree(ExpandConstant('{app}\dbs'), True, True, True)
end
end
else
CreateDir(ExpandConstant('{app}\dbs'))

DelTree(ExpandConstant('{app}\img'), True, False, False)
if DirExists(ExpandConstant('{app}\img')) then
begin
if MsgBox('Удалить фотографии пользователей?',mbconfirmation, mb_yesno) = IDYES then
begin
DelTree(ExpandConstant('{app}\img'), True, True, True)
end
end
else
CreateDir(ExpandConstant('{app}\img'))
end
end;
Автор: ExpeditorR
Дата сообщения: 27.06.2008 14:48
Может кто уже спрашивал, но тем не менее, как можно вывести Label поверх WizardBitmapImage?
Автор: SotM
Дата сообщения: 27.06.2008 14:59
ExpeditorR
В смысле как вывести?! Не конкретный вопрос.
Берешь и выводишь. Тут самое главное смотреть куда указывает Parent этого самого Label.
Т.к. не известно что и как ты делаешь, то ответ соответствующий. Хоть бы код привел для приличия.

Автор: braunberg
Дата сообщения: 27.06.2008 16:24
AlexDJ666
Решил, что ты знаком с руководством Kindly, в нем они есть. Можешь взять отсюда AdvSplash.dll callnsis.dll
Автор: nOobCrafter
Дата сообщения: 27.06.2008 17:02
гхым..в приведенном выше скрипте столкнулся с одной проблемкой, когда ставишь софтину заново, оно предлагает деинстальнуть прогу на всякий случай перед новой установкой, и удаляет все файлы которые были вложены в сетуп, а все файлы которые были присоединены в те папки уже после установки как и положено или остаются или спрашивает надо ли их удалить. Вопрос, как сделать что бы оставалось ВСЕ содержимое указанной папки?..., придумал вариант получше, как просто в случае отказа удаления, просто переименовать нужную папку. Тогда и при повторном инстале они небудут затираться даже если эта папка и осталась. А то допустим файлы с настройками за все время свое имя неменяют и после перестановки будут затираться, хотя их хотелось бы сохранить.
Вот вариант примерного кода, который уже встречался тут, но тут неуказано когда конкретно надо бэкапить (или как и написано "до инстала"?) и что надо бэкапить
[more=код..][Setup]
AppName=AppName
AppVerName=AppVerName
DefaultDirName={pf}\My Program

[Files]
Source: Files\*; DestDir: {app}; BeforeInstall: CreateBackup()

[Code]
procedure CreateBackup();
begin
if FileExists(ExpandConstant(CurrentFileName)) then
FileCopy(ExpandConstant(CurrentFileName),
ExpandConstant('{app}\') +
GetDateTimeString('dd/mm/yyyy hh:nn:ss ', '-', '-') +
ExtractFileName(ExpandConstant(CurrentFileName)), True)
end;[/more]

можно немного подправить что бы было прмерно видно как сделать что бы указать конкретную директорию бэкапа и во время анинстала? а то я пардон с инно знаком 3тий день %)
Так же раньше поднималась тема о том как добавить случайный рег файл в инсталл, то есть файл находится где то и через "Обзор" его нужно показать, разница лишь в том что там надо было добавить в реестр, а тут надо бы его просто скопировать в директорию... Чем можно было бы такое реализовать?...
Автор: ExpeditorR
Дата сообщения: 27.06.2008 22:38
SotM
Спасибо за направление хода мыслей. Я действительно не определил родительский компонент Всего и делов-то.
Label1.Parent:=WizardForm.WizardBitmapImage.Parent;

P.S.
И вовсе не обязательно ехиднечать.
Какой пример кода я должен был привести ради приличия: Label1:=TLabel.Create(WizardForm); и какой в нём смысл-это же смешно.
Кстати и вопрос я задал вполне конкретный "как можно вывести Label поверх WizardBitmapImage?" Русскими словами "Как вывести надпись на большой картинке Визарда?" Можно подумать вариантов прям куча.
Автор: DKolot
Дата сообщения: 28.06.2008 09:28
Имеется такая проблема.
В секции [Registry] надо создать ключ тип "binary" но значение т.е. "ValueData" должна быть константа, а именно {app}. Подскажите пожалуйста, как добиться такого результата.

Заранее спасибо.
Автор: serg_aka_lain
Дата сообщения: 28.06.2008 12:42
DKolot
Это уже обсуждалось, но вот еще раз [more]

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
RegWriteBinaryValue(HKLM, 'Software\My Company\My Program\Settings', 'InstallPath', ExpandConstant('{app}'));
end;
end;

[/more]

Автор: EagleSH
Дата сообщения: 29.06.2008 13:14

Цитата:
"RatingsInfo"="<Ratings xmlns=\"urn:schemas-microsoft-com:GameDescription.v1\">

<Rating ratingSystemID=\"{768BD93D-63BE-46A9-8994-0B53C4B5248F}\" ratingID=\"{78D8CC82-372F-44e4-B70C-8944DB7BCC24}\">

<Descriptor descriptorID=\"{ABE23B46-7F9F-495b-B4A9-87F41743727F}\"/>

<Descriptor descriptorID=\"{7231EA3A-1ACC-4bcd-9C3A-A60EA6888B6D}\"/>

<Descriptor descriptorID=\"{D49A8F0C-B183-4a34-8D86-33F2DC0E2D6C}\"/>

<Descriptor descriptorID=\"{B0DEC59B-3AC4-475e-90F7-242C2A60CA71}\"/>

<Descriptor descriptorID=\"{BE562A5F-2A80-4c28-9752-74C696E2ABAF}\"/>

</Rating>

<Rating ratingSystemID=\"{36798944-B235-48ac-BF21-E25671F597EE}\" ratingID=\"{E2681CD6-318A-4935-8275-AF657045C333}\">

<Descriptor descriptorID=\"{F110F831-9412-40c9-860A-B489407ED374}\"/>

</Rating>

<Rating ratingSystemID=\"{5B39D1B8-ED49-4055-8A47-04B29A579AD6}\" ratingID=\"{11F7079A-563B-4a4c-9478-156F615A78DE}\">

<Descriptor descriptorID=\"{6CA2DE44-81E2-491e-917A-3816F7298953}\"/>

<Descriptor descriptorID=\"{9C8680ED-C0A6-4700-ACDF-B24C979511E0}\"/>

<Descriptor descriptorID=\"{F110F831-9412-40c9-860A-B489407ED374}\"/>

</Rating>

<Rating ratingSystemID=\"{C705DCF4-6AFE-4f4f-BC51-21807E4E5CFB}\" ratingID=\"{B72233AA-D3F0-4258-8E32-94C99F38160E}\"/>

<Rating ratingSystemID=\"{EC290BBB-D618-4cb9-9963-1CAAE515443E}\" ratingID=\"{75AEE0A2-8640-4a20-8DE5-EC93D8DAB219}\"/>

</Ratings>"
"IsSigned"=dword:00000001


Господа, как добавить в реестр? то при компиле - inno ругается. Могу конечно внешне добавить, но не прикольно как-то. подскажите через Инно.
Автор: serg_aka_lain
Дата сообщения: 29.06.2008 14:10
EagleSH

Записать можно примерно так [more]
procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep = ssPostInstall then
begin
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\GameUX\Games\{GUID}', 'RatingsInfo' ,
'<Ratings xmlns=\"urn:schemas-microsoft-com:GameDescription.v1\">' #13#10
' <Rating ratingSystemID=\"{768BD93D-63BE-46A9-8994-0B53C4B5248F}\" ratingID=\"{78D8CC82-372F-44e4-B70C-8944DB7BCC24}\">' #13#10
' <Descriptor descriptorID=\"{ABE23B46-7F9F-495b-B4A9-87F41743727F}\"/>' #13#10
' <Descriptor descriptorID=\"{7231EA3A-1ACC-4bcd-9C3A-A60EA6888B6D}\"/>' #13#10
' <Descriptor descriptorID=\"{D49A8F0C-B183-4a34-8D86-33F2DC0E2D6C}\"/>' #13#10
' <Descriptor descriptorID=\"{B0DEC59B-3AC4-475e-90F7-242C2A60CA71}\"/>' #13#10
' <Descriptor descriptorID=\"{BE562A5F-2A80-4c28-9752-74C696E2ABAF}\"/>' #13#10
'</Rating>' #13#10
' <Rating ratingSystemID=\"{36798944-B235-48ac-BF21-E25671F597EE}\" ratingID=\"{E2681CD6-318A-4935-8275-AF657045C333}\">' #13#10
' <Descriptor descriptorID=\"{F110F831-9412-40c9-860A-B489407ED374}\"/>' #13#10
'</Rating>' #13#10
' <Rating ratingSystemID=\"{5B39D1B8-ED49-4055-8A47-04B29A579AD6}\" ratingID=\"{11F7079A-563B-4a4c-9478-156F615A78DE}\">' #13#10
' <Descriptor descriptorID=\"{6CA2DE44-81E2-491e-917A-3816F7298953}\"/>' #13#10
' <Descriptor descriptorID=\"{9C8680ED-C0A6-4700-ACDF-B24C979511E0}\"/>' #13#10
' <Descriptor descriptorID=\"{F110F831-9412-40c9-860A-B489407ED374}\"/>' #13#10
'<Rating>' #13#10
' <Rating ratingSystemID=\"{C705DCF4-6AFE-4f4f-BC51-21807E4E5CFB}\" ratingID=\"{B72233AA-D3F0-4258-8E32-94C99F38160E}\"/>' #13#10
' <Rating ratingSystemID=\"{EC290BBB-D618-4cb9-9963-1CAAE515443E}\" ratingID=\"{75AEE0A2-8640-4a20-8DE5-EC93D8DAB219}\"/>' #13#10
'</Ratings>');
end;
end;

[/more]

з.ы. А "GameuxInstallHelper.dll" комунить удалось заюзать в Inno (только с ней можно правильно добавить ярлыки для Vista Game Explorer).
Автор: EagleSH
Дата сообщения: 29.06.2008 14:19
serg_aka_lain
спс!
Автор: DKolot
Дата сообщения: 29.06.2008 20:06
serg_aka_lain

Громадное спасибо!
Автор: Unc1e
Дата сообщения: 29.06.2008 20:07
serg_aka_lain, EagleSH Правильная интеграция на примере Mass Effect. [more]
Код: #define MainExe "{app}\MassEffectLauncher.exe"
#define GDFBinary "{app}\Binaries\MassEffectGDF.dll"

[Files]
Source: "GameuxInstallHelper.dll"; DestDir: "{app}"; Flags: overwritereadonly

[ code ]
type
TGUID = record
Data1: Cardinal;
Data2,
Data3: Word;
Data4: array [0..8] of char;
end;

function GenerateGUID(var GUID: TGUID): Cardinal;
external 'GenerateGUID@files:GameuxInstallHelper.dll stdcall setuponly';

function AddToGameExplorer(Binary: String; Path: String; InstallType: Integer; var GUID: TGUID): Cardinal;
external 'AddToGameExplorerA@files:GameuxInstallHelper.dll stdcall setuponly';

function CreateTask(InstallType: Integer; var GUID: TGUID; TaskType: Integer; TaskNumber: Integer; TaskName: String; Binary: String; Parameters: String): Cardinal;
external 'CreateTaskA@files:GameuxInstallHelper.dll stdcall setuponly';

function RetrieveGUIDForApplication(Binary: String; var GUID: TGUID): Cardinal;
external 'RetrieveGUIDForApplicationA@{app}\GameuxInstallHelper.dll stdcall uninstallonly';

function RemoveFromGameExplorer(var GUID: TGUID): Cardinal;
external 'RemoveFromGameExplorer@{app}\GameuxInstallHelper.dll stdcall uninstallonly';

function RemoveTasks(var GUID: TGUID): Cardinal;
external 'RemoveTasks@{app}\GameuxInstallHelper.dll stdcall uninstallonly';

const
PlayTask = 0;
SupportTask = 1;

var
GUID: TGUID;

procedure CurStepChanged(CurStep: TSetupStep);
var
Binary, MainExe: String;
begin
if CurStep = ssInstall then
GenerateGUID(GUID);

if CurStep = ssPostInstall then
begin
Binary:=ExpandConstant('{#GDFBinary}');
MainExe:=ExpandConstant('{#MainExe}');
AddToGameExplorer(Binary, ExpandConstant('{app}'), 3, GUID);
CreateTask(3, GUID, PlayTask, 0, 'Play', MainExe, '');
CreateTask(3, GUID, SupportTask, 0, 'BioWare Website', 'http://www.bioware.com/', '');
CreateTask(3, GUID, SupportTask, 1, 'Support WebSite', 'http://masseffect.bioware.com/route/me/pc/vt/cs/en/', '');
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
Binary: String;
GUID: TGUID;
begin
if CurUninstallStep=usUninstall then
begin
Binary:=ExpandConstant('{#GDFBinary}');
RetrieveGUIDForApplication(Binary, GUID);
RemoveFromGameExplorer(GUID);
RemoveTasks(GUID);
UnloadDll(ExpandConstant('{app}\GameuxInstallHelper.dll'));
end;
end;
Автор: serg_aka_lain
Дата сообщения: 29.06.2008 20:49
Unc1e

За пример спасибо, а реестр, точнее
HKLM SOFTWARE\Microsoft\Windows\CurrentVersion\GameUX\Games\{GUID}

- {GUID} -это есть номер сгенереный функцией GenerateGUID или просто идентификатор приложения(игры)?.
Автор: Unc1e
Дата сообщения: 29.06.2008 21:01
serg_aka_lain, да {GUID} генерируется каждый раз новый и создается раздел с таким именем в реестре и папка в C:\Users\{username}\AppData\Local\Microsoft\Windows\GameExplorer. А вот идентификатор игры библиотека сама читает из GDF файла игры и пишет в ApplicationId... Кажется так.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

Предыдущая тема: Презентация


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