Войти

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 4]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 [36] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105

N00bak
29-01-2012, 17:39
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data.arc'), ExpandConstant('{app}'), 'rus', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break; »
надо немер компонента ставить вместо первого 0

N00bak
29-01-2012, 18:14
подскажите пожалуйста как изменить вид страницы компонентов чтобы я мог сам сделать шрифт написаного там и расположение

Johny777
30-01-2012, 02:14
N00bak,
вот код меняющий весь шрифт на той или иной странице

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpInfoBefore then WizardForm.Font.Name:= 'Verdana'; /// страница пролога
if CurPageID = wpLicense then WizardForm.Font.Name:= 'Verdana'; /// страница лицензии
end;
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,

id страниц

CurPageChanged: CurPageID = wpWelcome Приветствие
CurPageChanged: CurPageID = wpLicense Лицензионное соглашение
CurPageChanged: CurPageID = wpPassword Пароль
CurPageChanged: CurPageID = wpInfoBefore Информация перед установкой
CurPageChanged: CurPageID = wpUserInfo Информация о пользователе
CurPageChanged: CurPageID = wpSelectDir Выбор папки для установки
CurPageChanged: CurPageID = wpSelectComponents Выбор компонентов (типов)
CurPageChanged: CurPageID = wpSelectProgramGroup Выбор группы меню "Пуск"
CurPageChanged: CurPageID = wpSelectTasks Выбор дополнительных задач
CurPageChanged: CurPageID = wpReady Готовность к установке (Сводная информация)
CurPageChanged: CurPageID = wpPreparing Отображение процесса подготовки к установке
CurPageChanged: CurPageID = wpInstalling Отображение процесса установки

для изменения шрифта определённых лейблов, их расположения и размера на странице, ровно как и размера самой страницы рекомендую воспользоваться расширенной версией Inno от Restools (легко и удобно через GUI во вкладке "Редактор форм"), скачать который можно здесь http://forum.oszone.net/showthread.php?p=1201499#post1201499 или здесь http://innoultra.ru/

если нужно сделать одну из страниц уникальной (или все разные ), то это можно сделать по примеру кода "Прогрессбар в маленьком окне В левом нижнем углу"
http://forum.ru-board.com/topic.cgi?forum=5&topic=35848&start=1355&limit=1&m=1#1
также тебе пригодятся "компоненты основных страниц" http://forum.oszone.net/post-1096943-634.html из шапки темы


El Sanchez,
спасибо за автозапуск версии 2
работает отлично и всплывающее меню даже лучше и удобнее четырёх отдельных кнопок

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,

подскажите пожалуйста как объединить два кода!
знаний паскаля нет, а логики дальше не хватает
для компонентов у меня есть панель с описанием (так называемый "CompDescText")
вот оригинал и он же у меня в скрипте (только с константами описаний)
http://rghost.ru/36219751

я его изменил для страницы задач и он тоже работает
http://rghost.ru/36219742

вернее работал, пока я не начал их соединять

в моём скрипте уже есть описание компонетов
теперь хотел добавить описания и задач на станице задач
сделал так (чёрным те места, которые я поменял и вставил)


[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.

[_Code]

function enabledesc(ComponentsListHandle: HWND; TasksListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';
function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

var
Info, Info2: TNewStaticText;
InfoCaption, InfoCaption2: TNewStaticText;
InfoPanel, InfoPanel2: TPanel;

procedure InitializeWizard;

begin
InfoPanel2 := TPanel.Create(WizardForm);
InfoPanel2.Parent := WizardForm.SelectTasksPage;
InfoPanel2.Caption := '';
InfoPanel2.Top := WizardForm.TasksList.Top;
InfoPanel2.Left := ScaleX(216);
InfoPanel2.Width := ScaleX(200);
InfoPanel2.Height := WizardForm.TasksList.Height;
InfoPanel2.BevelInner := bvRaised;
InfoPanel2.BevelOuter := bvLowered;
InfoCaption2 := TNewStaticText.Create(WizardForm);
InfoCaption2.Parent := WizardForm.SelectTasksPage;
InfoCaption2.Caption := 'Информация:';
InfoCaption2.Left := ScaleX(224);
InfoCaption2.Top := InfoPanel.Top - ScaleY(5);
InfoCaption2.Font.Color := clActiveCaption;
Info2 := TNewStaticText.Create(WizardForm);
Info2.Parent := InfoPanel;
Info2.AutoSize := False;
Info2.Left := ScaleX(6);
Info2.Width := ScaleX(188);
Info2.Top := ScaleY(12);
Info2.Height := WizardForm.TasksList.Height - ScaleY(18);
Info2.Caption := 'Наведите на компонент, чтобы получить дополнительную информацию';
Info2.WordWrap := true;

InfoPanel := TPanel.Create(WizardForm);
InfoPanel.Parent := WizardForm.SelectComponentsPage;
InfoPanel.Caption := '';
InfoPanel.Top := ScaleY(477);
InfoPanel.Left := ScaleX(0);
InfoPanel.Width := ScaleX(382);
InfoPanel.Height := ScaleY(72);
InfoPanel.BevelInner := bvRaised;
InfoPanel.BevelOuter := bvLowered;
InfoCaption := TNewStaticText.Create(WizardForm);
InfoCaption.Parent := WizardForm.SelectComponentsPage;
InfoCaption.Caption := ExpandConstant('{cm:ComponentsInfoPanel1}');
InfoCaption.Left := ScaleX(7);
InfoCaption.Top := InfoPanel.Top - ScaleY(6);
InfoCaption.Font.Color := clWhite;

Info := TNewStaticText.Create(WizardForm);
Info.Parent := InfoPanel;
Info.AutoSize := False;
Info.Left := ScaleX(10);
Info.Width := ScaleX(370);
Info.Top := ScaleY(10);
Info.Height := ScaleY(60);
Info.Caption := ExpandConstant('{cm:ComponentsInfoPanel2}');
Info.WordWrap := true;

enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
ExpandConstant('{cm:ComponentsDescription1};')+ /// оисания компонетов
ExpandConstant('{cm:ComponentsDescription2};')+
ExpandConstant('{cm:ComponentsDescription3};')+
ExpandConstant('{cm:ComponentsDescription4};')+
ExpandConstant('{cm:ComponentsDescription5};')+
ExpandConstant('{cm:ComponentsDescription6};')+
ExpandConstant('{cm:ComponentsDescription7};')+
ExpandConstant('{cm:ComponentsDescription8};')+
ExpandConstant('{cm:ComponentsDescription9};')+
ExpandConstant('{cm:ComponentsDescription10};')+
ExpandConstant('{cm:ComponentsDescription11};')+
ExpandConstant('{cm:ComponentsDescription12};')+
ExpandConstant('{cm:ComponentsDescription13};')+
ExpandConstant('{cm:ComponentsDescription14};')+
ExpandConstant('{cm:ComponentsDescription15};')+
ExpandConstant('{cm:ComponentsDescription16};')+
ExpandConstant('{cm:ComponentsDescription17};')+
ExpandConstant('{cm:ComponentsDescription18};')+
ExpandConstant('{cm:ComponentsDescription19};')+
ExpandConstant('{cm:ComponentsDescription20};')+
ExpandConstant('{cm:ComponentsDescription21};')+
ExpandConstant('{cm:ComponentsDescription22};')
enabledesc(WizardForm.TasksList.Handle,Info.Handle, ------------------- Здесь ошибка Comma `,` Expected (не знаю как объединить эту строчку и описания задач с их аналогами для компонентов)
'Короткое описание игры;'+ ///// описания задач начало
'Дополнительная документация, на разных языках;'+
'Техт игры;'+
'Официальный английский текст от EA Games;'+
'Официальный немецкий текст от неизвестного производителя;'+
'Пиратский китайский текст;'+
'Официальный русский текст от софтклаб;'+
'Озвучка игры;'+
'Официальная английская озвучка от EA Games;'+
'Официальная немецкая озвучка от неизвестного производителя;'+
'Пиратская китайская озвучка;'+
'Официальная русская озвучка от софтклаб;'+
'Русская озвучка от 7Wolf;'+
'Русская озвучка от фаргуса;'
);
end.



Script Joiner не помогает

Gnom_aka_Lexander
30-01-2012, 10:56
Script Joiner не помогает »
Script Joiner помогает! В папке с установленным Script Joiner есть папка с примерами того, КАК нужно подготовить скрипт, и тогда все просто великолепно объединяется и работает. Тут (http://innoultra.ru/?p=378) я постарался максимально понятно описать, как с помощью этой утилиты объединять скрипты. Специально для тех, кто считает, что справки пишут для лохов, а реальным пацанам она ни к чему.

lmiol
30-01-2012, 13:13
доброго времени суток, у меня проблема, как сделать так как на картинке??? (картинку оформлял я http://i29.fastpic.ru/big/2012/0130/12/b0ee66822992843298272b3500a70a12.jpg )

смысл заключается в том что у пользователя перед компонентами вылетает выбор режима установки для Standart пользователя и для Premium пользователя
Для обоих вариантов вылетает список компонентов которые он не может выбрать (но может увидеть что они устанавливаются) и те которые может выбрать
Они идентичны только в разделе Premium устанавливается еще одна строчка

вот ниже код который я использовал для написания такого скрипта но не знаю как дальше писать


[Setup]
AppName=Quake Live
AppVerName="Quake Live"
AppPublisher=Mio Dark Project
CreateAppDir=no
DefaultGroupName=Mio Dark Project\Quake Live
AllowNoIcons=yes
OutputDir=Output
OutputBaseFilename=Quake Live
SetupIconFile=setup.ico
Compression=lzma/ultra
SolidCompression=yes
ShowTasksTreeLines=yes
DisableProgramGroupPage=yes
WizardImageFile=Big.bmp
WizardSmallImageFile=Small.bmp
UninstallDisplayIcon={app}\Uninstall\uninstall.ico
UninstallFilesDir={app}\Uninstall
WizardImageStretch=no
AlwaysShowComponentsList=no

[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl;

[Types]
Name: "full"; Description: "Все компоненты";
Name: "custom"; Description: "Выбрать компоненты"; Flags: iscustom

[Components]
Name: "main"; Description: "Cтандартные файлы Quake Live"; Types: full custom; Flags: fixed
Name: "main2"; Description: "Премиум файлы Quake Live"; Types: full custom; Flags: fixed
Name: "plug"; Description: "Плагин Quake Live"; Types: full custom
Name: "browser"; Description: "Портативный Firefox под Quake Live"; Types: full custom
Name: "manual"; Description: "Руководство и Награды"; Types: full custom
Name: "anti"; Description: "Античит PunkBuster"; Types: full custom

[CustomMessages]
HeaderLabelPage=Выберите тип вашего аккаунта
MyRadioCaption_1=Standart
MyRadioCaption_2=Premium / Pro
PageTextHeader=На этой странице Вы можете выбрать тип вашего аккаунта, который вы используете в игре.
MyText_1=Будут установлены файлы которые доступны для игроков без подписки.
MyText_2=Будут установлены файлы которые доступны для игроков с Premium/Pro подпиской.


[Tasks]
Name: "desktopicon"; Description: "Создать ярлык на Рабочем Столе"; GroupDescription: "{cm:AdditionalIcons}"

[Files]
;source: "uninstall.ico"; Components: main; DestDir: "{code:DetectWindows}\uninstall"; Flags: ignoreversion
;Source: "usercur\*"; Components: main; DestDir: "{code:DetectWindows}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
;Source: "usercur2\*"; Components: manual; DestDir: "{code:DetectWindows}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
;Source: "programfiles\*"; Components: browser; DestDir: "{pf}\"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension
Source: "pk31\*"; Components: main; DestDir: "{code:DetectWindows}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension nocompression
;Source: "pbsvc.exe" ;Components: anti;DestDir: "{tmp}"; Flags: ignoreversion
;Source: "QuakeLiveNP_433.msi" ;Components: plug;DestDir: "{tmp}"; Flags: ignoreversion

[code]
var
MyNewPage: TWizardPage;
Rect: TRect;
HIcon: LongInt;
AIconFileName: String;
MyRadioBtn_1, MyRadioBtn_2: TNewRadioButton;

procedure GetInstTypePage();
begin
MyNewPage := CreateCustomPage(wpWelcome,
ExpandConstant('{cm:HeaderLabelPage}'), '');



with TNewStaticText.Create(WizardForm) do
begin
Width := WizardForm.InnerNotebook.Width;
Height := ScaleY(26);
WordWrap := True;
Caption := ExpandConstant('{cm:PageTextHeader}');
Parent := MyNewPage.Surface;
end;

MyRadioBtn_1 := TNewRadioButton.Create(WizardForm);
with MyRadioBtn_1 do
begin
Top := ScaleY(50);
Width := ScaleX(150);
Caption := ExpandConstant('{cm:MyRadioCaption_1}');
Checked := True;
Parent := MyNewPage.Surface;
end;

with TNewStaticText.Create(WizardForm) do
begin
Left := ScaleX(16);
Top := ScaleY(68);
Width := WizardForm.InnerNotebook.Width - ScaleX(60);
Height := ScaleY(26);
WordWrap := True;
Caption := ExpandConstant('{cm:MyText_1}');
Parent := MyNewPage.Surface;
end;

MyRadioBtn_2 := TNewRadioButton.Create(WizardForm);
with MyRadioBtn_2 do
begin
Top := ScaleY(120);
Width := ScaleX(150);
Caption := ExpandConstant('{cm:MyRadioCaption_2}');
Parent := MyNewPage.Surface;
end;

with TNewStaticText.Create(WizardForm) do
begin
Left := ScaleX(16);
Top := ScaleY(138);
Width := WizardForm.InnerNotebook.Width - ScaleX(60);
Height := ScaleY(26);
WordWrap := True;
Caption := ExpandConstant('{cm:MyText_2}');
Parent := MyNewPage.Surface;
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID <= wpSelectDir) and (PageID = wpReady) and (MyRadioBtn_2.Checked) then
Result := True;
end;

procedure InitializeWizard();
begin
GetInstTypePage();
end;
function DetectWindows(s: string): string;
var
SubKeyName, ResultStr: string;
begin
SubKeyName:= 'Software\Microsoft\Windows NT\CurrentVersion';
RegQueryStringValue(HKLM, SubKeyName, 'ProductName', ResultStr);
if Pos('XP', ResultStr) > 0 then
Result:= ExpandConstant('{%APPDATA}\id Software')
else
if Pos('Vista', ResultStr) > 0 then
// не знаю, будет ли это C:\Users\Ваше_имя_пользователя\AppData\LocalLow\id Software
// проверить не где
Result:= ExpandConstant('{%APPDATA}\LocalLow\id Software')
else Result:= '{%APPDATA}\LocalLow\id Software'; // сюда нужно вписать путь по дефолту, т.е. если не XP или Vista
end;

Johny777
30-01-2012, 14:04
Лександер,
соединил
сделал как в инструкции
в итоге получил дубликаты DeinitializeSetup1() и InitializeWizard1()
и опять ту же ошибку Duplicate Idenifier выдаёт, когда доходи до строк function

// --- Generated by InnoSetup Script Joiner version 3.0, Jul 22 2009, (c) Bulat Ziganshin <Bulat.Ziganshin@gmail.com>. More info at http://issjoiner.codeplex.com/

// --- Source: 1.iss ------------------------------------------------------------

function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';
function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

var
Info: TNewStaticText;
InfoCaption: TNewStaticText;
InfoPanel: TPanel;

procedure DeinitializeSetup1();
begin
disabledesc();
end;

procedure InitializeWizard1();
begin


InfoPanel := TPanel.Create(WizardForm);
InfoPanel.Parent := WizardForm.SelectComponentsPage;
InfoPanel.Caption := '';
InfoPanel.Top := WizardForm.ComponentsList.Top;
InfoPanel.Left := ScaleX(216);
InfoPanel.Width := ScaleX(200);
InfoPanel.Height := WizardForm.ComponentsList.Height;
InfoPanel.BevelInner := bvRaised;
InfoPanel.BevelOuter := bvLowered;
InfoCaption := TNewStaticText.Create(WizardForm);
InfoCaption.Parent := WizardForm.SelectComponentsPage;
InfoCaption.Caption := 'Èíôîðìàöèÿ:';
InfoCaption.Left := ScaleX(224);
InfoCaption.Top := InfoPanel.Top - ScaleY(5);
InfoCaption.Font.Color := clActiveCaption;
Info := TNewStaticText.Create(WizardForm);
Info.Parent := InfoPanel;
Info.AutoSize := False;
Info.Left := ScaleX(6);
Info.Width := ScaleX(188);
Info.Top := ScaleY(12);
Info.Height := WizardForm.ComponentsList.Height - ScaleY(18);
Info.Caption := 'Íàâåäèòå íà êîìïîíåíò, ÷òîáû ïîëó÷èòü äîïîëíèòåëüíóþ èíôîðìàöèþ';
Info.WordWrap := true;
enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
'Êîðîòêîå îïèñàíèå èãðû;'+
'Äîïîëíèòåëüíàÿ äîêóìåíòàöèÿ, íà ðàçíûõ ÿçûêàõ;'+
'Òåõò èãðû;'+
'Îôèöèàëüíûé àíãëèéñêèé òåêñò îò EA Games;'+
'Îôèöèàëüíûé íåìåöêèé òåêñò îò íåèçâåñòíîãî ïðîèçâîäèòåëÿ;'+
'Ïèðàòñêèé êèòàéñêèé òåêñò;'+
'Îôèöèàëüíûé ðóññêèé òåêñò îò ñîôòêëàá;'+
'Îçâó÷êà èãðû;'+
'Îôèöèàëüíàÿ àíãëèéñêàÿ îçâó÷êà îò EA Games;'+
'Îôèöèàëüíàÿ íåìåöêàÿ îçâó÷êà îò íåèçâåñòíîãî ïðîèçâîäèòåëÿ;'+
'Ïèðàòñêàÿ êèòàéñêàÿ îçâó÷êà;'+
'Îôèöèàëüíàÿ ðóññêàÿ îçâó÷êà îò ñîôòêëàá;'+
'Ðóññêàÿ îçâó÷êà îò 7Wolf;'+
'Ðóññêàÿ îçâó÷êà îò ôàðãóñà;'
);
end;

// --- Source: 2.iss ------------------------------------------------------------

function enabledesc(TasksListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';
function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

var
Info: TNewStaticText;
InfoCaption: TNewStaticText;
InfoPanel: TPanel;

procedure DeinitializeSetup2();
begin
disabledesc();
end;

procedure InitializeWizard2();
begin


InfoPanel := TPanel.Create(WizardForm);
InfoPanel.Parent := WizardForm.SelectTasksPage;
InfoPanel.Caption := '';
InfoPanel.Top := WizardForm.TasksList.Top;
InfoPanel.Left := ScaleX(216);
InfoPanel.Width := ScaleX(200);
InfoPanel.Height := WizardForm.TasksList.Height;
InfoPanel.BevelInner := bvRaised;
InfoPanel.BevelOuter := bvLowered;
InfoCaption := TNewStaticText.Create(WizardForm);
InfoCaption.Parent := WizardForm.SelectTasksPage;
InfoCaption.Caption := 'Èíôîðìàöèÿ:';
InfoCaption.Left := ScaleX(224);
InfoCaption.Top := InfoPanel.Top - ScaleY(5);
InfoCaption.Font.Color := clActiveCaption;
Info := TNewStaticText.Create(WizardForm);
Info.Parent := InfoPanel;
Info.AutoSize := False;
Info.Left := ScaleX(6);
Info.Width := ScaleX(188);
Info.Top := ScaleY(12);
Info.Height := WizardForm.TasksList.Height - ScaleY(18);
Info.Caption := 'Íàâåäèòå íà êîìïîíåíò, ÷òîáû ïîëó÷èòü äîïîëíèòåëüíóþ èíôîðìàöèþ';
Info.WordWrap := true;
enabledesc(WizardForm.TasksList.Handle,Info.Handle,
'1;'+
'12;'+
'2222;'+
'5555;'+
'10;'+

'Ð0;'
);
end;

// --- Dispatching code ------------------------------------------------------------

procedure DeinitializeSetup();
begin
DeinitializeSetup1();
DeinitializeSetup2();
end;

procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
end;



Script Joiner новый

Gnom_aka_Lexander
30-01-2012, 14:37
Johny777,
function enabledesc(TasksListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';
function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

У тебя эти две функции зачем-то объявлены дважды. естественно они не могут быть объединены, поскольку они вызываемые извне. а жойнеру - ему по барабану на то, что ты элементарных вещей понять не хочешь.

Johny777
30-01-2012, 14:57
Лександер,
да это так
сейчас без этих функций соединил, а потом дописал в Joined
инструкцию по Джоинеру несколько раз перечитал прежде чем соединять. Не получается :(
ну если у Вас соединилось, то дайте пожалуйста результат, а то я в тупике
говорю ж
паскаль не знаю
а про внешние функции в инструкции не слова

TROY Diamond
30-01-2012, 17:02
Можно ли как-то "обновить" список файлов деинсталлятора?
У меня в процессе установки создаются файлы, о которых установщик "НЕ знает"...
Все эти файлы я записываю в секцию "[UninstallDelete]", а есть ли какой-нибудь другой способ?

Вариант:

[UninstallDelete]
Type: filesandordirs; Name: "{app}

НЕ подходит, т.к. в процессе использования приложения в папке установки, создаются файлы конфигурации, профили, настройки, которые если пользователь не хочет удалять, ДОЛЖНЫ ОСТАТЬСЯ!
А данная команда удалит всю папку установки...

И аналогичный вопрос, по поводу "этих файлов", - как их удалить если установка НЕ завершится или пользователь её прервёт?

Johny777
30-01-2012, 17:31
TROY Diamond,
идеальный для тебя вариант (сам использую)
скопируй куда нибудь в конец секции CODE
http://rghost.ru/36227252
если не были созданы файлы после установки в директории установки, то удалит всё
если были созданы, то после удаления основных файлов появится окно со списком созданных после работы приложения файлов и галками можешь удалять отдельные ветки или некоторые файлы
скрин-пример http://rghost.ru/36227488
не забудь испольвоать в секции удаления такую строку
[UninstallDelete]
Type: files; Name: {app}
это часть Inno Setup Upgrade от Виктора Дробова

TROY Diamond
30-01-2012, 19:56
Как в "родных" установщиках для игр из серии "S.T.A.L.K.E.R." реализованы проверка системных требований и вывод информации о винчестерах, через библиотеку "get_hw_caps.dll"?
Или это сейчас не актуально?
Сколько смотрел на форуме - многие спрашивали... а кода я чё та так и не нашёл, предлагают другие варианты!

И вообще интересуют все "примочки", которые есть в этих установщиках...
"Народную солянку" НЕ надо!!! Нужны разные "штуки", которые есть в оригинальных установщиках: проверка наличия уже установленной игры, системные требования, невозможность продолжения установки, инфа и винтах, установка DirectX до установки игры, регистрация и т.п.
Если есть скрипт оригинального установщика, - вообще отлично...

Johny777
30-01-2012, 21:28
TROY Diamond,
Если есть скрипт оригинального установщика, - вообще отлично... »
есть для стакера
наткнулся когда листал предыдущие ветки этой темы
писали здешние умы
http://rghost.ru/36232050
в нём есть сис. требования
они же есть и в шапке
вот тебе ещё 2 решения на проверку сис. требований
http://rghost.ru/36232112

TROY Diamond
30-01-2012, 21:34
Johny777

СПАСИБО ОГРОМНОЕ!!!

Насчёт удаления файлов есть способ если установка прервана и БЕЗ "визуальности".

За Сталкера отдельная благодарность!!!

Johny777
30-01-2012, 22:39
TROY Diamond,
за сталкера не мне спасибо а Serega и другим кто скрипт писал
я его только сохранил себе, чтоб изучить и знаний набраться
насчёт удаления проблем не вижу
когда нажимаешь отмену идёт "откат изменений" во время которого удаляется всё что успело установиться
хотя я и не пользуюсь модулем фриарка, но он тоже всё трёт при "Отмене"

если ты завршил процесс, то вручную
есть решение, что перед установкой проверят что в директории лежит и выдаёт запрс на "запустить" или "удалить" или "отмена"
http://rghost.ru/36233810

Dark_Delphin
31-01-2012, 01:57
Всем привет.

Помогите вот с этой проблемкой:
Когда запускаю инсталл и высвечивается выбор языка, и когда я сразу закриваю этот выбор языка выдаёт такую ошибку:

http://i32.fastpic.ru/big/2012/0131/0e/7a545030353c31a0433056745847530e.png


Заранее спасибо.

Johny777
31-01-2012, 03:00
ntrx,
кажется это из-за использования скина
у меня та же ошибка
используй автовыбор языка
вот так
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
ShowLanguageDialog=auto
LanguageDetectionMethod=uilanguage
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
будет язык в соответствии с языком системы и не будет окна выбора языка при запуске инсталятора
Из справки "При значении auto окно появится только в том случае, когда инсталлятор не найдет идентификатор языка."

Gnom_aka_Lexander
31-01-2012, 10:41
кажется это из-за использования скина »
Вовсе нет. Это попытка выгрузки dll до ее инициализации. Serega давал мне както такое решение:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[*code]
var
Initialize:Boolean;

function InitializeSetup(): Boolean;
begin
Initialize:=False; // инициализация еще не произошла.
// Ваш код
Result:=True;
end;

procedure InitializeWizard();
begin
// Ваш код
Initialize:=True;// к этому моменту инсталл уже работает, значит инициализация прошла упешно
end;

procedure DeinitializeSetup();
begin
if Initialize then // если произошла инициализация, то выгружаем все,что нужно, в противном случае, в этом нет необходимости
begin
UnloadSkin;
gdipShutdown;
end;
end;

nik1967
31-01-2012, 11:41
ну если у Вас соединилось, то дайте пожалуйста результат, а то я в тупике »
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Files]
Source: descctrl.dll; Flags: dontcopy

[Tasks]
Name: need; Description: необходимо; GroupDescription: для првильной работы:; Check:
Name: need\no_steam; Description: выкл Steam (если включен); GroupDescription: для првильной работы:;
Name: need\direct_x; Description: установть/обновить DirectX; GroupDescription: для првильной работы;
Name: need\visual_c; Description: установть/отремонтировать VisualC++; GroupDescription: для првильной работы;
Name: need\hey; Description: ещё рекомендуется:; Flags: unchecked; GroupDescription: для првильной работы;
Name: need\hey\fonts; Description: установить шрифты; GroupDescription: для првильной работы;

[Components]
Name: "program"; Description: "Игра"; Types: full compact custom; Flags: fixed
Name: "help"; Description: "Помощь"; Types: full
Name: "Text"; Description: "Tехт"; Types: full
Name: "Text\en"; Description: "Aнглийский"; Flags: exclusive
Name: "Text\de"; Description: "Немецкий"; Flags: exclusive
Name: "Text\cn"; Description: "Китайский"; Flags: exclusive
Name: "Text\ru"; Description: "Русский"; Flags: exclusive
Name: "Voice"; Description: "Озвучка"; Types: full
Name: "Voice\en"; Description: "Английская"; Flags: exclusive
Name: "Voice\de"; Description: "Немецкая"; Flags: exclusive
Name: "Voice\ch"; Description: "Китайская"; Flags: exclusive
Name: "Voice\ru"; Description: "Русская"; Flags: exclusive
Name: "Voice\ru2"; Description: "Русская"; Flags: exclusive
Name: "Voice\ru3"; Description: "Русская"; Flags: exclusive

[_Code]
var
Info, InfoCaption: TNewStaticText;
InfoPanel: TPanel;

function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';
function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

procedure InitializeWizard;
begin
WizardForm.TYPESCOMBO.Visible:= false;
WizardForm.ComponentsList.Height := WizardForm.ComponentsList.Height + WizardForm.ComponentsList.Top - WizardForm.TYPESCOMBO.Top;
WizardForm.ComponentsList.Top := WizardForm.TYPESCOMBO.Top;
WizardForm.ComponentsList.Width := ScaleX(200);

InfoPanel:= TPanel.Create(WizardForm);
with InfoPanel do
begin
Parent:= WizardForm.SelectComponentsPage;
Caption := '';
SetBounds(ScaleX(216),WizardForm.ComponentsList.Top,ScaleX(200),WizardForm.ComponentsList.Height);
BevelInner := bvRaised;
BevelOuter := bvLowered;
end;
InfoCaption := TNewStaticText.Create(WizardForm);
with InfoCaption do
begin
Parent:= WizardForm.SelectComponentsPage;
Caption:= 'Информация:';
Left:= ScaleX(224);
Top:= InfoPanel.Top - ScaleY(5);
Font.Color:= clActiveCaption;
end;
Info:= TNewStaticText.Create(WizardForm);
with Info do
begin
Parent:= InfoPanel;
AutoSize:= False;
SetBounds(ScaleX(6),ScaleY(12),ScaleX(188),WizardForm.ComponentsList.Height - ScaleY(18));
WordWrap:= true;
end;
end;

Procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
wpSelectComponents:
begin
InfoPanel.Parent:= WizardForm.SelectComponentsPage;
InfoCaption.Parent:= WizardForm.SelectComponentsPage;
Info.Caption:= 'Наведите на компонент, чтобы получить дополнительную информацию';
disabledesc();
enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
'Короткое описание игры;'+
'Дополнительная документация, на разных языках;'+
'Техт игры;'+
'Официальный английский текст от EA Games;'+
'Официальный немецкий текст от неизвестного производителя;'+
'Пиратский китайский текст;'+
'Официальный русский текст от софтклаб;'+
'Озвучка игры;'+
'Официальная английская озвучка от EA Games;'+
'Официальная немецкая озвучка от неизвестного производителя;'+
'Пиратская китайская озвучка;'+
'Официальная русская озвучка от софтклаб;'+
'Русская озвучка от 7Wolf;'+
'Русская озвучка от фаргуса;');
end;

wpSelectTasks:
begin
InfoPanel.Parent:= WizardForm.SelectTasksPage;
InfoCaption.Parent:= WizardForm.SelectTasksPage;
Info.Caption:= 'Наведите на задачу, чтобы получить дополнительную информацию';
disabledesc();
enabledesc(WizardForm.TasksList.Handle,Info.Handle,
'Чтобы игра игралась;'+
'Нужно сделать так;'+
'Выключить Steam нафиг;'+
'Зафигачить DirectX;'+
'Намутить VisualC++;'+
'А так же;'+
'Воткнуть ненужные шрифты;');
end;
end;
end;

procedure DeinitializeSetup();
begin
disabledesc();
end;
Ну и не забыть добавить descctrl.dll
;Всем известная игра S.T.A.L.K.E.R. при установке использует некоторые хитрости. Дело не в проверке системных требований или свободного
;места на диске. Самый важный момент при инсталляции перепакованной игры - создать правильный файл "fsgame.ltx". Данный файл представляет
;собой некоторый загрузчик данных. Любое неправильное его построение чревато глюками и неправильной работе игры. Чтобы создать абсолютно
;точную копию оригинала нужно выполнить следующий код (не забываем при сборке, чтобы файл "fsgame.ltx" был абсолютно пустой):
[_Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
S: String;
begin
If CurStep=ssPostInstall then
begin
S := ExpandConstant('{commondocs}\STALKER-SHOC\')
StringChangeEx(S, ':\', ':\|', True);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$app_data_root$=true|false|' + S + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_data$ = false| true| $fs_root$| gamedata\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_ai$ = true| false| $game_data$| ai\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_spawn$ = true| false| $game_data$| spawns\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_anims$ = true| true| $game_data$| anims\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_levels$ = true| false| $game_data$| levels\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_meshes$ = true| true| $game_data$| meshes\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_dm$ = true| true| $game_data$| meshes\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_shaders$ = true| true| $game_data$| shaders\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_sounds$ = true| true| $game_data$| sounds\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_textures$ = true| true| $game_data$| textures\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_scripts$ = true| false| $game_data$| scripts\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_config$ = true| false| $game_data$| config\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$level$ = false| false| $game_levels$' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_saves$ = true| false| $app_data_root$| savedgames\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$logs$ = true| false| $app_data_root$| logs\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$screenshots$ = true| false| $app_data_root$| screenshots\' + #13, true);
end;
end;

lmiol
31-01-2012, 11:42
Мне както Лександер подсказывал код, но он как вариант не подходит!!!
а то что можно сделать такой как я показал это 100%, я видел в какойто из версий Klite codec pack

Gnom_aka_Lexander
31-01-2012, 12:47
lmiol, в твоем случае, без содания дополнительной страницы компонентов, и описания кучи условий, вариант только такой:
[Setup]
AppName=Quake Live
AppVerName="Quake Live"
AppPublisher=Mio Dark Project
CreateAppDir=no

[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl;

[Types]
Name: "full"; Description: "Все компоненты";
Name: "custom"; Description: "Выбрать компоненты"; Flags: iscustom

[Components]
Name: "main"; Description: "Cтандартные файлы Quake Live"; Types: full custom; Flags: fixed
Name: "main2"; Description: "Премиум файлы Quake Live"; Types: full custom;
Name: "plug"; Description: "Плагин Quake Live"; Types: full custom;
Name: "browser"; Description: "Портативный Firefox под Quake Live"; Types: full custom;
Name: "manual"; Description: "Руководство и Награды"; Types: full custom;
Name: "anti"; Description: "Античит PunkBuster"; Types: full custom;

[CustomMessages]
HeaderLabelPage=Выберите тип вашего аккаунта
MyRadioCaption_1=Standart
MyRadioCaption_2=Premium / Pro
PageTextHeader=На этой странице Вы можете выбрать тип вашего аккаунта, который вы используете в игре.
MyText_1=Будут установлены файлы которые доступны для игроков без подписки.
MyText_2=Будут установлены файлы которые доступны для игроков с Premium/Pro подпиской.


[*code]
var
MyNewPage: TWizardPage;
MyRadioBtn:ArraY[0..1]of TNewRadioButton;

procedure GetInstType;
begin
WizardForm.ComponentsList.ItemEnabled[1]:= MyRadioBtn[1].Checked or not MyRadioBtn[0].Checked;
WizardForm.ComponentsList.Checked[1]:=MyRadioBtn[1].Checked or not MyRadioBtn[0].Checked;
WizardForm.ComponentsList.Checked[4]:=MyRadioBtn[1].Checked or not MyRadioBtn[0].Checked;
end;

procedure GetInstTypePage;
var
i:integer;
begin
MyNewPage := CreateCustomPage(wpWelcome,
ExpandConstant('{cm:HeaderLabelPage}'), '');

with TNewStaticText.Create(WizardForm) do
begin
Width := WizardForm.InnerNotebook.Width;
Height := ScaleY(26);
WordWrap := True;
Caption := ExpandConstant('{cm:PageTextHeader}');
Parent := MyNewPage.Surface;
end;

for i:=0 to 1 do
begin
MyRadioBtn[i] := TNewRadioButton.Create(WizardForm);
with MyRadioBtn[i] do
begin
Parent := MyNewPage.Surface;
Top := ScaleY(50+i*70);
Width := ScaleX(150);
case i of
0: begin
Caption := ExpandConstant('{cm:MyRadioCaption_1}');
Checked := True;
end;
1:Caption := ExpandConstant('{cm:MyRadioCaption_2}');
end;
end;

with TNewStaticText.Create(WizardForm) do
begin
Parent := MyNewPage.Surface;
SetBounds(ScaleX(16),ScaleY(68+i*70),WizardForm.InnerNotebook.Width - ScaleX(60),ScaleY(26));
WordWrap := True;
case i of
0:Caption := ExpandConstant('{cm:MyText_1}');
1:Caption := ExpandConstant('{cm:MyText_2}');
end;
end;
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID <= wpSelectDir)
and (PageID = wpReady)
and (MyRadioBtn[1].Checked)
then Result := True;
end;

procedure InitializeWizard();
begin
GetInstTypePage;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectComponents then GetInstType;
end;это 100%, я видел в какойто из версий Klite codec pack »
Конечно можно. создаешь еще одну страницу компонентов и делаешь привязки к старой по каждому пункту. Сам.




© OSzone.net 2001-2012