Войти

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


Страниц : 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 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Crazy Noise
21-05-2013, 01:18
Имеется ключ 1234-5678-ABCD-EFGH который просто записывается в файл keysgame.ini без каких либо секции и дополнительныч строк, просто ключ и всё. Сам keysgame.ini должен создаться при вставке ключа в папке Мои документы/GameEX.

Как это реализовать?

Есть только набросок кода
[*code]
var
CustomPage: TWizardPage;
Edit1: TNewEdit;
Edit2: TNewEdit;
Edit3: TNewEdit;
Edit4: TNewEdit;

procedure InitializeWizard();
begin
CustomPage := CreateCustomPage(wpSelectTasks, 'Заголовок', 'Описание');

Edit1 := TNewEdit.Create(WizardForm);
with Edit1 do
begin
Parent := CustomPage.Surface;
Left := ScaleX(96);
Top := ScaleY(98);
Width := ScaleX(50);
Height := ScaleY(21);
end;

Edit2 := TNewEdit.Create(WizardForm);
with Edit2 do
begin
Parent := CustomPage.Surface;
Left := ScaleX(152);
Top := ScaleY(98);
Width := ScaleX(50);
Height := ScaleY(21);
end;

Edit3 := TNewEdit.Create(WizardForm);
with Edit3 do
begin
Parent := CustomPage.Surface;
Left := ScaleX(208);
Top := ScaleY(98);
Width := ScaleX(50);
Height := ScaleY(21);
end;

Edit4 := TNewEdit.Create(WizardForm);
with Edit4 do
begin
Parent := CustomPage.Surface;
Left := ScaleX(264);
Top := ScaleY(98);
Width := ScaleX(50);
Height := ScaleY(21);
end;

Edit1.TabOrder := 0;
Edit2.TabOrder := 1;
Edit3.TabOrder := 2;
Edit4.TabOrder := 3;
end;

Alloc
21-05-2013, 03:51
Всем привет! Уважаемые знатоки, помогите разобраться со следующей задачей:
Допустим имеется простенький инсталлятор, к которому я прикрутил библиотек isskin.dll способом описанном на том же сайте.
Проблема в том, что если я устанавливаю следующие значения


DiskSpanning=Yes
SlicesPerDisk=1
DiskSliceSize=1566000000


и компилирую приложение, создается отдельный файл Setup-1.bin, как и должно быть.. так вот если данный файл удалить, при запуске Инсталлятора программа сразу выдает форму в которой просит вставить диск №1.. Если нажать отмену и выйти из процесса установки сразу же выскочит сообщение о том, что isskin.dll не найден. Как обработать это событие? Ведь распаковка isskin.dll происходит на этапе InitializeSetup, а диолог о вставке диска вылезает раньше ее? Как предотвратить данную ошибку в случае если Setup-1.bin не будет найден?

alert30
21-05-2013, 04:38
Alloc, попробуйте скачать другую isskin.dll и сделать те же действия.

Gnom_aka_Lexander
21-05-2013, 06:37
Alloc, просто isskin.dll у тебя внутри Setup-1.bin и при удалении оного, естественно он будет не найден.
вот так такое дело обрабатывается:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[*code]
var
sKLoaded : Boolean;

function InitializeSetup(): Boolean;
begin
sKLoaded := False;
// грузим скин
sKLoaded := True;
Result := True;
end;

procedure DeinitializeSetup();
begin
if sKLoaded then
begin
// выгружаем скин
end;
end;

by_gangster
21-05-2013, 11:02
Ребята всем привет, возник вопрос по сжатию, мне понравилось сжатие игры Call of Duty MW3... там просто офигенное сжатие, при вскрытии инсталера, я обнаружил файлы связаные с zip (procomp.exe) их там несколько и имели разрешение .exe. В интернете я узнал что самое лучшее сжатие это NanoZip но примеров я не нашёл, если у кого есть примерчик, то выложите пожалуйста...

Gnom_aka_Lexander
21-05-2013, 11:17
by_gangster, темой ошибся. Но все-же, вот список параметров для нанозипа: Смотреть (http://ru.compressionmax.com/nanozip.html) Воспользоваться функцией exec в инно я думаю сможешь самостоятельно.
и да, не перестарайся, как механики, у которых последнее время для установки игры комп нужен в разы мощнее, чем для самой игры.

by_gangster
21-05-2013, 12:12
Gnom_aka_Lexander, а что ещё хорошо сжимает ?

А на сайте nanozip.net чем отличаются архивы для скачивания 32bit и 64bit ?

Gnom_aka_Lexander
21-05-2013, 12:22
by_gangster, по приведенной ссылке - различные параметры для различных типов файлов. логично, что если разложить все ресурсы по полочкам, то при терпеливом подборе параметров очень хорошо сжимает даже винрар. можешь воспользоваться paq, если тебе наплевать на пользователей - сжатие весьма великолепно, но вот распаковка без преувеличение может растянуться на несколько суток(вспомним "знаменитый" репак GTA4). КГБ - аналогично. Если нужно хорошо и быстро - то фриарк с вменяемыми словарями ( словарь - примерно равен свободной нефрагментированной оперативке, которая потребуется для распаковки) с тщательным подбором параметров и препроцессоров (каковых во фриарке - десятки) для каждого типа данных.
А на сайте nanozip.net чем отличаются архивы для скачивания 32bit и 64bit ? »
Только разрядностью системы в которую можно устанавливать. 32bit можно в любую, 64bit - только в х64. теоретически 64bit может дать лучшее сжатие. Для распаковки не имеет значения разраядность упаковщика, как и в любом пакере или прекомпрессоре.

saurn
21-05-2013, 12:25
Как это реализовать? »
[Code]
var
SerialPage: TWizardPage;
Block_1, Block_2, Block_3, Block_4: TNewEdit;
sNumber: String;

procedure InitializeWizard();
begin
SerialPage := CreateCustomPage(wpSelectTasks, 'Serial number', 'Please insert serial number');

Block_1 := TNewEdit.Create(nil);
with Block_1 do
begin
Parent := SerialPage.Surface;
SetBounds(ScaleX(96), ScaleY(98), ScaleX(50), ScaleY(21));
Text := '';
MaxLength := 4;
end;

Block_2 := TNewEdit.Create(nil);
with Block_2 do
begin
Parent := SerialPage.Surface;
SetBounds(ScaleX(152), ScaleY(98), ScaleX(50), ScaleY(21));
Text := '';
MaxLength := 4;
end;

Block_3 := TNewEdit.Create(nil);
with Block_3 do
begin
Parent := SerialPage.Surface;
SetBounds(ScaleX(208), ScaleY(98), ScaleX(50), ScaleY(21));
Text := '';
MaxLength := 4;
end;

Block_4 := TNewEdit.Create(nil);
with Block_4 do
begin
Parent := SerialPage.Surface;
SetBounds(ScaleX(265), ScaleY(98), ScaleX(50), ScaleY(21));
Text := '';
MaxLength := 4;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
sNumber := ExpandConstant(Block_1.Text + '-' + Block_2.Text + '-' + Block_3.Text + '-' + Block_4.Text);
case CurStep of
ssPostInstall: SaveStringToFile(ExpandConstant('{userdocs}\GameEX\keysgame.ini'), sNumber, True);
end;
end;


//или вместо шага CurStepChanged записывать серийник в файл при нажатии "Далее" на этой странице.
//function NextButtonClick(CurPageID:integer): Boolean;
//begin
// sNumber := ExpandConstant(Block_1.Text + '-' + Block_2.Text + '-' + Block_3.Text + '-' + Block_4.Text);
// case CurPageID of
// SerialPage.ID: SaveStringToFile(ExpandConstant('{userdocs}\GameEX\keysgame.ini'), sNumber, True);
// end;
// Result := True;
//end;
Проверять сейчас неначем, рабочий комп пока на реставрации.

Alloc
21-05-2013, 12:41
Gnom_aka_Lexander, спасибо за ответ, я попробовал как Вы сказали? но по прежнему ошибка имеет место быть.

Internal error: ExtractTemporaryFile: The file "isskin.dll" was not found.

Gnom_aka_Lexander
21-05-2013, 12:44
Alloc, в декларации функций из isskin.dll добавь отложенный запуск (delayload). а вообще странное желание - заставить работать инсталлятор, отрезав от него большую его часть.. (примерно тоже самое, что пытаться заставить работать голову, отрезав ее от туловища)

saurn
21-05-2013, 12:54
Alloc,
[Code]
var
sKLoaded: Boolean;

function InitializeSetup(): Boolean;
begin
Result := FileExists(ExpandConstant('{src}\Setup-1.bin'));
if Result then
// грузим скин
sKLoaded := True;
end;

procedure DeinitializeSetup();
begin
if sKLoaded then
begin
// выгружаем скин
end;
end;
Или запихните isskin.dll в ресурсы ексишника

Как предотвратить данную ошибку в случае если Setup-1.bin не будет найден? »
В этом случае и инсталятор уже "не инсталятор". Так что это ненужные пляски с бубном.)))

Alloc
21-05-2013, 13:05
Gnom_aka_Lexander, "delayload" не помогает..

Gnom_aka_Lexander, saurn, нет, я просто хочу чтоб все было идеально) Может все таки можно как то заставить инсталлятор помещать файлы скинов в сам екзешник ну а остальное уже в "Setup-1.bin"?)

Gnom_aka_Lexander
21-05-2013, 13:06
Может все таки можно как то заставить инсталлятор помещать файлы скинов в сам екзешник ну а остальное уже в "Setup-1.bin"?) »
Нет.

saurn
21-05-2013, 13:20
нет, я просто хочу чтоб все было идеально) »
Идеально, если инсталл вообще не запустится при отсутствии некой своей части, или(еще лучше) известит пользователя сообщением. А так...
можно как то заставить инсталлятор помещать файлы скинов в сам екзешник »
Можно поместить все рабочие файлы в ресурсы и грузить их оттуда, но смысла в этом нет.

Alloc
21-05-2013, 13:24
Gnom_aka_Lexander, ясно, наверное действительно "никак".. единственный вариант который предложил saurn, запихнуть библиотеку в ресурсы екзешника.

Большое спасибо всем за помощь!

saurn
21-05-2013, 13:35
Alloc, пихать в ресурсы придется не только библу, но и абсолютно все рабочие файлы. Есть вариант гораздо проще, на начальном этапе проверить наличие бинарников рядом с сетапом и, если хоть один из них не будет найден, выводить соответствующее уведомление, и только, если все части инстала на месте, тогда проводить инициализацию.

Gnom_aka_Lexander
21-05-2013, 13:39
saurn, не мучайся. пока скрипта не увидишь - все равно ничем помочь не сможешь. я-то уже знаю решение, но нужно удостовериться, что я прав. а для этого нужно видеть скрипт.

saurn
21-05-2013, 15:23
Aquila, ну а трабла то в чем?

Aquila
21-05-2013, 15:27
saurn, Трабла в том, что я не знаю как это сделать




© OSzone.net 2001-2012