Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 6]
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;
Всем привет! Уважаемые знатоки, помогите разобраться со следующей задачей:
Допустим имеется простенький инсталлятор, к которому я прикрутил библиотек isskin.dll способом описанном на том же сайте.
Проблема в том, что если я устанавливаю следующие значения
DiskSpanning=Yes
SlicesPerDisk=1
DiskSliceSize=1566000000
и компилирую приложение, создается отдельный файл Setup-1.bin, как и должно быть.. так вот если данный файл удалить, при запуске Инсталлятора программа сразу выдает форму в которой просит вставить диск №1.. Если нажать отмену и выйти из процесса установки сразу же выскочит сообщение о том, что isskin.dll не найден. Как обработать это событие? Ведь распаковка isskin.dll происходит на этапе InitializeSetup, а диолог о вставке диска вылезает раньше ее? Как предотвратить данную ошибку в случае если Setup-1.bin не будет найден?
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 может дать лучшее сжатие. Для распаковки не имеет значения разраядность упаковщика, как и в любом пакере или прекомпрессоре.
Как это реализовать? »
[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;
Проверять сейчас неначем, рабочий комп пока на реставрации.
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). а вообще странное желание - заставить работать инсталлятор, отрезав от него большую его часть.. (примерно тоже самое, что пытаться заставить работать голову, отрезав ее от туловища)
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 не будет найден? »
В этом случае и инсталятор уже "не инсталятор". Так что это ненужные пляски с бубном.)))
Gnom_aka_Lexander, "delayload" не помогает..
Gnom_aka_Lexander, saurn, нет, я просто хочу чтоб все было идеально) Может все таки можно как то заставить инсталлятор помещать файлы скинов в сам екзешник ну а остальное уже в "Setup-1.bin"?)
Gnom_aka_Lexander
21-05-2013, 13:06
Может все таки можно как то заставить инсталлятор помещать файлы скинов в сам екзешник ну а остальное уже в "Setup-1.bin"?) »
Нет.
нет, я просто хочу чтоб все было идеально) »
Идеально, если инсталл вообще не запустится при отсутствии некой своей части, или(еще лучше) известит пользователя сообщением. А так...
можно как то заставить инсталлятор помещать файлы скинов в сам екзешник »
Можно поместить все рабочие файлы в ресурсы и грузить их оттуда, но смысла в этом нет.
Gnom_aka_Lexander, ясно, наверное действительно "никак".. единственный вариант который предложил saurn, запихнуть библиотеку в ресурсы екзешника.
Большое спасибо всем за помощь!
Alloc, пихать в ресурсы придется не только библу, но и абсолютно все рабочие файлы. Есть вариант гораздо проще, на начальном этапе проверить наличие бинарников рядом с сетапом и, если хоть один из них не будет найден, выводить соответствующее уведомление, и только, если все части инстала на месте, тогда проводить инициализацию.
Gnom_aka_Lexander
21-05-2013, 13:39
saurn, не мучайся. пока скрипта не увидишь - все равно ничем помочь не сможешь. я-то уже знаю решение, но нужно удостовериться, что я прав. а для этого нужно видеть скрипт.
Aquila, ну а трабла то в чем?
saurn, Трабла в том, что я не знаю как это сделать
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.