Проблема Помогите доделать установщик Рандомные ключи

AlexZetCrow

Новичок
В общем
1. Перекрашивает в другие иконки выделенные папки
2. Проверяет системные требования
3. В реестре все пути прописаны
4. Имеет Splash

Проверяйте, включены компоненты, настройки опций включены с подгонкой под экран пользователя

Спасибо всем кто помогал, впереди ещё АВТОУСТАНОВЩИК обновлений, с возможностью подкачки файлов извне.

Репак не без косяков, я думаю.. Огромный минус отсутствие решения сжатия не программным способом Inno Setup.
Скачать файлы можно по ссылке: https://cloud.mail.ru/public/xX2m/PDt34aPYR
 

AlexZetCrow

Новичок
Пример Функции "RandomKey"
Доброго времени суток, меня заинтересовал следующий вопрос
Код:
//
var
  GameKey: array of String;

function AddKey(Key: String): Boolean;
var
  Ind: Integer;
begin
  Ind:=GetArrayLength(GameKey);
  SetArrayLength(GameKey, Ind+1);
  GameKey[Ind]:=Key;
end;

function GetRandomKey(Param: String): String;
var
  Count: Integer;
begin
  Count:=GetArrayLength(GameKey);
  Result:=GameKey[Random(Count)];
end;

function MyRand(Param: string): string;
begin
  Result := Format('%.2d', [Random(StrToInt(Param))]);
end;

procedure InitializeWizard1;
begin
  AddKey('1B4CC5AFS3BUQSZMKSDD');
  AddKey('2HIVRNBRUVIRN3VJIWEI');
  AddKey('GNWE6RJ2XECXKJ5QEDWF');
  AddKey('2VNBE07L6SZWIHR81X4Q');
  AddKey('IYVD023U6XNPEQR5LMC9');
  AddKey('1ESU73IFGVDQ8A52X90R');
  AddKey('CPN98KLDYXS571BJMG4F');
  AddKey('H2TJPRM7SQ1I4KO9VYBX');
  AddKey('A4GQW3ZMPDSCR72FBEKO');
  AddKey('Z4JYD1MU75KIPTSLBC30');
  AddKey('T2LKE5A7GDJ6NWBVU384');
  AddKey('ATZPIL7BSYHRMND32KVE');
  AddKey('WYE0ID4KS3GMH9RFOBVT');
  AddKey('OMW716IB3ZKAFNPHDQ0T');
  AddKey('XFQB0IRALCTP7M49652J');
  AddKey('74T3JRYQ6PXKGM510ZL9');
  AddKey('5W1CTMRDPQ4BLZE0OAIV');
  AddKey('7IWS2VNK4BFJMQOUA19X');
  AddKey('CNLV1ZFWYBM6DHXKJP0S');
  AddKey('DLRSHNE697MUJTOF413I');
  AddKey('5K64NC7O1WTDXME8S3B2');
  AddKey('QCSKH07ETU9D4ZY65213');
  AddKey('0BSEDWFMT23VLQPY4Z8C');
  AddKey('6OTQXYSBZDLI18VNAWM3');
  AddKey('NGT5AZ3IO0LU6DK4WV89');
  AddKey('AYS4QDNTGK6RBV5F0JZO');
  AddKey('H4V10GNAQ9R7PUKDXFLZ');
  AddKey('O2X9RQZHM6VD8PNEGYU3');
  AddKey('NBS0P85FG1E3ULD4A6QW');
  AddKey('CT803M1QSLROPZ6U247I');
  AddKey('LS7I0XEJNA85D6P4T1CQ');
  AddKey('MXH24VLZ6CQKRSIF09P5');
  AddKey('AF0DESYBC4TVOZU6R1WJ');
  AddKey('WQK7SE5UY12PRVCB93GX');
  AddKey('TI6W92BAFOEQ5CG74HVM');
  AddKey('954ZBFOWMYGRJ1P2S6A8');
  AddKey('9GENJ7CIYKVTQ85UMOPZ');
  AddKey('2HIVRNBRUVIRN3VJIW{MyRand}');  
end;
Насколько верен мой генератор ключей ?

Можно ли используя вашу функцию указывать ключи для 3-х игр ? Вот в сборке есть три игры и они требуют каждый свой ключ, можно ли использовать GetRandomKey GetRandomKey1 т.д. и key.txt key1.txt т.д.? Всю ночь просидел перед решением проблемы, необходим выбор из имеющихся ключей под каждую игру, перечень ключей имеется, как заставить делать подстановку понимаю примерно только из вашей.. Может я в чем ошибся ?
Код:
function InitializeSetup: Boolean;
begin
  ExtractTemporaryFile('key.txt');
  Result := True;
end;

function GetRandomKey(): String;
var
  Lines: TArrayOfString;
  ArrayLength, RandomNum: Integer;
  FileName: String;
begin
// ExtractTemporaryFile('key.txt');
  FileName := ExpandConstant('{tmp}\key.txt');
  Result := '';
  if FileExists( FileName ) then
  begin
    if LoadStringsFromFile(FileName, Lines) then
    begin
      ArrayLength := GetArrayLength(Lines);
      RandomNum := Random(ArrayLength);

      Result := Lines[RandomNum];
    end;
  end;
end;  

procedure MyClick(Sender: TObject);
begin
  WizardForm.DirEdit.Text := GetRandomKey();
end;

procedure InitializeWizard;
begin
  WizardForm.DirEdit.Text := GetRandomKey();
  WizardForm.DirBrowseButton.OnClick := @MyClick;
  WizardForm.DirBrowseButton.Caption := 'Random Key';
end;
Посоветуйте где можно подробно почитать о препроцессорах и внедрении их в установщик. Благодарен буду если покажете есть тема с описанием автоустановщика обновлений, много данных здесь перерыл свою не нашел. Извиняюсь за беспокойство.
 
Последнее редактирование модератором:

Andreo Fadio

Старожил
Можно ли используя функцию указывать ключи для 3-х игр ? Вот в сборке есть три игры и они требуют каждый свой ключ, можно ли использовать GetRandomKey GetRandomKey1 т.д. и key.txt key1.txt т.д.?
Можно:
Код:
[Setup]
AppName = MyApp
AppVerName = MyApp
DefaultDirname = {pf}\MyApp
OutputDir=.

[Code]
var
  GameList: TNewCheckListBox;

function InitializeSetup: Boolean;
begin
  SaveStringToFile(ExpandConstant('{tmp}\key1.txt'), '1B4CC5AFS3BUQSZMKSDD'+ #13#10, True);
  SaveStringToFile(ExpandConstant('{tmp}\key1.txt'), '2HIVRNBRUVIRN3VJIWEI'+ #13#10, True);
  SaveStringToFile(ExpandConstant('{tmp}\key1.txt'), 'GNWE6RJ2XECXKJ5QEDWF', True);

  SaveStringToFile(ExpandConstant('{tmp}\key2.txt'), '2VNBE07L6SZWIHR81X4Q'+ #13#10, True);
  SaveStringToFile(ExpandConstant('{tmp}\key2.txt'), 'IYVD023U6XNPEQR5LMC9'+ #13#10, True);
  SaveStringToFile(ExpandConstant('{tmp}\key2.txt'), '1ESU73IFGVDQ8A52X90R', True);

  SaveStringToFile(ExpandConstant('{tmp}\key3.txt'), 'WYE0ID4KS3GMH9RFOBVT'+ #13#10, True);
  SaveStringToFile(ExpandConstant('{tmp}\key3.txt'), '7IWS2VNK4BFJMQOUA19X'+ #13#10, True);
  SaveStringToFile(ExpandConstant('{tmp}\key3.txt'), 'MXH24VLZ6CQKRSIF09P5', True);

  Result := True;
end;

function GetRandomKey(FileName: String): String;
var
  Lines: TArrayOfString;
  ArrayLength, RandomNum: Integer;
begin
  Result:= '';
  if FileExists(FileName) then
  begin
    if LoadStringsFromFile(FileName, Lines) then
    begin
      ArrayLength:= GetArrayLength(Lines);
      RandomNum:= Random(ArrayLength);
      Result:= Lines[RandomNum];
    end;
  end;
end;   

procedure MyClick(Sender: TObject);
begin
  if GameList.Checked[1] then WizardForm.DirEdit.Text:= GetRandomKey(ExpandConstant('{tmp}\key1.txt'));
  if GameList.Checked[2] then WizardForm.DirEdit.Text:= GetRandomKey(ExpandConstant('{tmp}\key2.txt'));
  if GameList.Checked[3] then WizardForm.DirEdit.Text:= GetRandomKey(ExpandConstant('{tmp}\key3.txt'));
end;

procedure InitializeWizard;
begin
  WizardForm.DirBrowseButton.OnClick:= @MyClick;
  WizardForm.DirBrowseButton.Caption:= 'Random Key';
  GameList:= TNewCheckListBox.Create(WizardForm.SelectDirPage);
  with GameList do
  begin
   SetBounds(ScaleX(2), WizardForm.DirEdit.Top+WizardForm.DirEdit.Height+ScaleY(10), ScaleX(145), ScaleY(90));
   BorderStyle:= bsNone;
   ParentColor:= True;
   MinItemHeight:= ScaleY(3);
   ShowLines:= False;
   WantTabs:= True;
   Parent:= WizardForm.SelectDirPage;
   AddGroup('Какую игру выбираете?', '', 0, nil);
   AddRadioButton('Игра №1', '', 0, True, True, nil);
   AddRadioButton('Игра №2', '', 0, False, True, nil);
   AddRadioButton('Игра №3', '', 0, False, True, nil);
   OnClickCheck:= @MyClick;
  end;
  if GameList.Checked[1] then WizardForm.DirEdit.Text:= GetRandomKey(ExpandConstant('{tmp}\key1.txt'));
  if GameList.Checked[2] then WizardForm.DirEdit.Text:= GetRandomKey(ExpandConstant('{tmp}\key2.txt'));
  if GameList.Checked[3] then WizardForm.DirEdit.Text:= GetRandomKey(ExpandConstant('{tmp}\key3.txt'));
end;
 

Infest

Новичок
Чтобы не плодить темы, думаю никто не против будет, если спрошу здесь.
@AlexZetCrow, не серчай, что пишу в твоей теме 😉

На второй странице есть сообщение с кодом автоматического детекта разрешения экрана и запись его в ini-файл.

Возник вопрос, как переделать данную секцию, чтобы правилось не одно значение, а два.
В моём случае, это:
iSize W= - ширина экрана
iSize H= - высота экрана

Код:
function SetResolutionInINI(FileName: PAnsiChar): Boolean;
var
  s: AnsiString;
  Screen: TPoint;
  i, b, e: Integer;
  ErrCheck: Boolean;
begin
  Result:=False;
  if not LoadStringFromFile(FileName, s) then Exit;
  if Pos('Resolution', s) <> 0 then begin
    for i:=Pos('Resolution', s) + Length('Resolution') to Length(s)-1 do begin
      if (s[i] = '=') and ErrCheck then Exit;
      if (s[i] = '=') and not ErrCheck then begin
        ErrCheck:=True;
        b:=i;
      end;
      if s[i] = #13 then begin
        e:=i;
        Break;
      end;
    end;
    Screen:=GetMonitorInfo;
    Result:=SaveStringToFile(FileName, Copy(s, 0, b)+' '+IntToStr(Screen.x)+' '+IntToStr(Screen.y)+Copy(s, e, Length(s)-e-1), False);
  end;
end;
Заранее спасибо :)
 

tihiy_don

Старожил
@Infest, вот мой пример, где я прописывал ширину и высоту монитора пользователя в ини файл. Помогал с кодом (Nemko)
Код:
[Setup]
AppName=Exp
AppVersion=0.1
CreateAppDir=no

[Code]
type
  HDC = LongWord;

function GetDC(HWND: hWnd): HDC; external 'GetDC@user32.dll stdcall';
function GetDeviceCaps(HDC: HDC; Index: Integer): Integer; external 'GetDeviceCaps@gdi32.dll stdcall';
function ReleaseDC(HWND: hWnd; DC: HDC): Integer; external 'ReleaseDC@user32.dll stdcall';

function GetMonitorInfo: TPoint;
var
  DC: HDC;
  Screen, null: TPoint;
begin
  Result:=null;
  DC:=GetDC(MainForm.Handle);
  Screen.x:=GetDeviceCaps(DC, 08);
  Screen.y:=GetDeviceCaps(DC, 10);
  if (Screen.x <> 0) and (Screen.y <> 0) then Result:=Screen;
  ReleaseDC(MainForm.Handle, DC);
end;

procedure SetResolutionInINI(FileName: PAnsiChar);
var
  cout: Byte;
  value: String;
  Screen: TPoint;
begin
  Screen:=GetMonitorInfo;
  for cout:=0 to 1 do begin
    if cout = 0 then value:='screenwidth' else value:='screenheight';
    if IniKeyExists('global', value, FileName) then begin
      if cout = 0 then SetIniInt('global', value, Screen.x, FileName) else SetIniInt('global', value, Screen.y, FileName);
    end;
  end;
end;

procedure InitializeWizard;
begin
  SetResolutionInINI(ExpandConstant('{src}\Options.ini'));
end;
 
Последнее редактирование:

AlexZetCrow

Новичок
@Infest, вот мой пример, где я прописывал ширину и высоту монитора пользователя в ини файл. Помогал с кодом (Nemko)
Код:
[Setup]
AppName=Exp
AppVersion=0.1
CreateAppDir=no

[Code]
type
  HDC = LongWord;

function GetDC(HWND: hWnd): HDC; external 'GetDC@user32.dll stdcall';
function GetDeviceCaps(HDC: HDC; Index: Integer): Integer; external 'GetDeviceCaps@gdi32.dll stdcall';
function ReleaseDC(HWND: hWnd; DC: HDC): Integer; external 'ReleaseDC@user32.dll stdcall';

function GetMonitorInfo: TPoint;
var
  DC: HDC;
  Screen, null: TPoint;
begin
  Result:=null;
  DC:=GetDC(MainForm.Handle);
  Screen.x:=GetDeviceCaps(DC, 08);
  Screen.y:=GetDeviceCaps(DC, 10);
  if (Screen.x <> 0) and (Screen.y <> 0) then Result:=Screen;
  ReleaseDC(MainForm.Handle, DC);
end;

procedure SetResolutionInINI(FileName: PAnsiChar);
var
  cout: Byte;
  value: String;
  Screen: TPoint;
begin
  Screen:=GetMonitorInfo;
  for cout:=0 to 1 do begin
    if cout = 0 then value:='screenwidth' else value:='screenheight';
    if IniKeyExists('global', value, FileName) then begin
      if cout = 0 then SetIniInt('global', value, Screen.x, FileName) else SetIniInt('global', value, Screen.y, FileName);
    end;
  end;
end;

procedure InitializeWizard;
begin
  SetResolutionInINI(ExpandConstant('{src}\Options.ini'));
end;
У иностранцев вылетает ошибка game.dat я не знаю как решить данную проблему, когда ты работал над сборкой репака AOTR как вы решили проблему? Можешь ли ты помочь ме с репаком я готов заплатить. Уже долго бьюсь работает, но не у иностранцев.
 

AlexZetCrow

Новичок
Можно:
Код:
[Setup]
AppName = MyApp
AppVerName = MyApp
DefaultDirname = {pf}\MyApp
OutputDir=.

[Code]
var
  GameList: TNewCheckListBox;

function InitializeSetup: Boolean;
begin
  SaveStringToFile(ExpandConstant('{tmp}\key1.txt'), '1B4CC5AFS3BUQSZMKSDD'+ #13#10, True);
  SaveStringToFile(ExpandConstant('{tmp}\key1.txt'), '2HIVRNBRUVIRN3VJIWEI'+ #13#10, True);
  SaveStringToFile(ExpandConstant('{tmp}\key1.txt'), 'GNWE6RJ2XECXKJ5QEDWF', True);

  SaveStringToFile(ExpandConstant('{tmp}\key2.txt'), '2VNBE07L6SZWIHR81X4Q'+ #13#10, True);
  SaveStringToFile(ExpandConstant('{tmp}\key2.txt'), 'IYVD023U6XNPEQR5LMC9'+ #13#10, True);
  SaveStringToFile(ExpandConstant('{tmp}\key2.txt'), '1ESU73IFGVDQ8A52X90R', True);

  SaveStringToFile(ExpandConstant('{tmp}\key3.txt'), 'WYE0ID4KS3GMH9RFOBVT'+ #13#10, True);
  SaveStringToFile(ExpandConstant('{tmp}\key3.txt'), '7IWS2VNK4BFJMQOUA19X'+ #13#10, True);
  SaveStringToFile(ExpandConstant('{tmp}\key3.txt'), 'MXH24VLZ6CQKRSIF09P5', True);

  Result := True;
end;

function GetRandomKey(FileName: String): String;
var
  Lines: TArrayOfString;
  ArrayLength, RandomNum: Integer;
begin
  Result:= '';
  if FileExists(FileName) then
  begin
    if LoadStringsFromFile(FileName, Lines) then
    begin
      ArrayLength:= GetArrayLength(Lines);
      RandomNum:= Random(ArrayLength);
      Result:= Lines[RandomNum];
    end;
  end;
end;  

procedure MyClick(Sender: TObject);
begin
  if GameList.Checked[1] then WizardForm.DirEdit.Text:= GetRandomKey(ExpandConstant('{tmp}\key1.txt'));
  if GameList.Checked[2] then WizardForm.DirEdit.Text:= GetRandomKey(ExpandConstant('{tmp}\key2.txt'));
  if GameList.Checked[3] then WizardForm.DirEdit.Text:= GetRandomKey(ExpandConstant('{tmp}\key3.txt'));
end;

procedure InitializeWizard;
begin
  WizardForm.DirBrowseButton.OnClick:= @MyClick;
  WizardForm.DirBrowseButton.Caption:= 'Random Key';
  GameList:= TNewCheckListBox.Create(WizardForm.SelectDirPage);
  with GameList do
  begin
   SetBounds(ScaleX(2), WizardForm.DirEdit.Top+WizardForm.DirEdit.Height+ScaleY(10), ScaleX(145), ScaleY(90));
   BorderStyle:= bsNone;
   ParentColor:= True;
   MinItemHeight:= ScaleY(3);
   ShowLines:= False;
   WantTabs:= True;
   Parent:= WizardForm.SelectDirPage;
   AddGroup('Какую игру выбираете?', '', 0, nil);
   AddRadioButton('Игра №1', '', 0, True, True, nil);
   AddRadioButton('Игра №2', '', 0, False, True, nil);
   AddRadioButton('Игра №3', '', 0, False, True, nil);
   OnClickCheck:= @MyClick;
  end;
  if GameList.Checked[1] then WizardForm.DirEdit.Text:= GetRandomKey(ExpandConstant('{tmp}\key1.txt'));
  if GameList.Checked[2] then WizardForm.DirEdit.Text:= GetRandomKey(ExpandConstant('{tmp}\key2.txt'));
  if GameList.Checked[3] then WizardForm.DirEdit.Text:= GetRandomKey(ExpandConstant('{tmp}\key3.txt'));
end;
Спасибо, сейчас подставлю.
 

AlexZetCrow

Новичок
Можно:
Код:
[Setup]
AppName = MyApp
AppVerName = MyApp
DefaultDirname = {pf}\MyApp
OutputDir=.

[Code]
var
  GameList: TNewCheckListBox;

function InitializeSetup: Boolean;
begin
  SaveStringToFile(ExpandConstant('{tmp}\key1.txt'), '1B4CC5AFS3BUQSZMKSDD'+ #13#10, True);
  SaveStringToFile(ExpandConstant('{tmp}\key1.txt'), '2HIVRNBRUVIRN3VJIWEI'+ #13#10, True);
  SaveStringToFile(ExpandConstant('{tmp}\key1.txt'), 'GNWE6RJ2XECXKJ5QEDWF', True);

  SaveStringToFile(ExpandConstant('{tmp}\key2.txt'), '2VNBE07L6SZWIHR81X4Q'+ #13#10, True);
  SaveStringToFile(ExpandConstant('{tmp}\key2.txt'), 'IYVD023U6XNPEQR5LMC9'+ #13#10, True);
  SaveStringToFile(ExpandConstant('{tmp}\key2.txt'), '1ESU73IFGVDQ8A52X90R', True);

  SaveStringToFile(ExpandConstant('{tmp}\key3.txt'), 'WYE0ID4KS3GMH9RFOBVT'+ #13#10, True);
  SaveStringToFile(ExpandConstant('{tmp}\key3.txt'), '7IWS2VNK4BFJMQOUA19X'+ #13#10, True);
  SaveStringToFile(ExpandConstant('{tmp}\key3.txt'), 'MXH24VLZ6CQKRSIF09P5', True);

  Result := True;
end;

function GetRandomKey(FileName: String): String;
var
  Lines: TArrayOfString;
  ArrayLength, RandomNum: Integer;
begin
  Result:= '';
  if FileExists(FileName) then
  begin
    if LoadStringsFromFile(FileName, Lines) then
    begin
      ArrayLength:= GetArrayLength(Lines);
      RandomNum:= Random(ArrayLength);
      Result:= Lines[RandomNum];
    end;
  end;
end; 

procedure MyClick(Sender: TObject);
begin
  if GameList.Checked[1] then WizardForm.DirEdit.Text:= GetRandomKey(ExpandConstant('{tmp}\key1.txt'));
  if GameList.Checked[2] then WizardForm.DirEdit.Text:= GetRandomKey(ExpandConstant('{tmp}\key2.txt'));
  if GameList.Checked[3] then WizardForm.DirEdit.Text:= GetRandomKey(ExpandConstant('{tmp}\key3.txt'));
end;

procedure InitializeWizard;
begin
  WizardForm.DirBrowseButton.OnClick:= @MyClick;
  WizardForm.DirBrowseButton.Caption:= 'Random Key';
  GameList:= TNewCheckListBox.Create(WizardForm.SelectDirPage);
  with GameList do
  begin
   SetBounds(ScaleX(2), WizardForm.DirEdit.Top+WizardForm.DirEdit.Height+ScaleY(10), ScaleX(145), ScaleY(90));
   BorderStyle:= bsNone;
   ParentColor:= True;
   MinItemHeight:= ScaleY(3);
   ShowLines:= False;
   WantTabs:= True;
   Parent:= WizardForm.SelectDirPage;
   AddGroup('Какую игру выбираете?', '', 0, nil);
   AddRadioButton('Игра №1', '', 0, True, True, nil);
   AddRadioButton('Игра №2', '', 0, False, True, nil);
   AddRadioButton('Игра №3', '', 0, False, True, nil);
   OnClickCheck:= @MyClick;
  end;
  if GameList.Checked[1] then WizardForm.DirEdit.Text:= GetRandomKey(ExpandConstant('{tmp}\key1.txt'));
  if GameList.Checked[2] then WizardForm.DirEdit.Text:= GetRandomKey(ExpandConstant('{tmp}\key2.txt'));
  if GameList.Checked[3] then WizardForm.DirEdit.Text:= GetRandomKey(ExpandConstant('{tmp}\key3.txt'));
end;
Подставлять нужно через

Какой вариант подстановки верный.. я давно не приступал к сборке снова репака.

Код:
Root: HKLM; Subkey: "SOFTWARE\Electronic Arts\Electronic Arts\The History Of Ages\ergc"; ValueType: String; ValueData: "{code:GetRandomKey}"; MinVersion: 1.0,1.5;"

Root: HKLM; Subkey: "SOFTWARE\Electronic Arts\Electronic Arts\The History Of Ages\ergc"; ValueType: String; ValueData: "{code:Key1}"; MinVersion: 1.0,1.5;

Root: HKLM; Subkey: "SOFTWARE\Electronic Arts\Electronic Arts\The History Of Ages\ergc"; ValueType: String; ValueData: "{GetRandomKey(ExpandConstant('{tmp}\key1.txt'))}"; MinVersion: 1.0,1.5;
P.S. Готов обсудить сумму помощи по поддержке и созданию нормального качественного репака, а то уже стыдно в который раз просить помощи у всех.
 

Andreo Fadio

Старожил
Какой вариант подстановки верный..
Для нужной вам цели указанные варианты именно вами не подходят (не один)...

Надо так:
Код:
Root: HKLM; Subkey: "SOFTWARE\Electronic Arts\Electronic Arts\The History Of Ages\ergc"; ValueType: String; ValueData: "{code:GetRandomKey|{tmp}\key1.txt}"; MinVersion: 1.0,1.5;"
 

AlexZetCrow

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

Спасибо за совет выше, сейчас применю. Сборку целиком проверить смогу лишь на следующей недели (
 

AlexZetCrow

Новичок
показали бы скрипт установки целиком, чтобы не гадать :)
Да не вопрос ))
Было б что там охранять, мне не хватает библиотек для сжатия и можно ли как-то настроить
Соединить внешнее сжатие + выбор установки?
к примеру мне нужно 2 игры и мод в обязательном порядке, а патч и материалы отдельно опционально?

Не могу разобраться с внешним сжатием, разбирать чужие репаки снова не особо горю желанием, был бы рад если б кто поделился библиотеками или подучил в работе внешних компиляций, особенно интересует 7-zip он отлично сжимает и при выборе словаря в 512мб ( вышло в 4 раза сжать) при условии что у меня вообще ноутбук и 8 гб оперативки ))

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

Поправил реестр, сделал выбор языка в реестре в зависимости от выбранного языка установки
Логотип щас сместил немного вниз, но я в дизайн не силён, не совсем понимаю как сделать оформление под интересный и красивый дизайн.

Из не решенных вопросов:
1. Использование внешних приложений для сжатия и использования их вместе с традиционным указанием мест установки
2. Правильно ли я настроил установщик, работает ли для англ язычного пользователя выбор языка и озвучки
3. Настройка дизайна, оформление
4. Осталась также проблема с ключами (как бы они то вписываются, но автопоражение осталось что-то делаю не так, в результате всегда приходится пользоваться CD fixer по итогу завершения установки)
5. Не исправил проблему обязательного открытия страниц браузера которые ведут на мои группы, надо сделать активность только с кнопки по завершению.

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

Да знаю, можно было б папками раскидаться, но мне удобней контролировать все файлы, зная что куда точно встанет.
 

Вложения

Andreo Fadio

Старожил
Правильно ли я настроил установщик, работает ли для англ язычного пользователя выбор языка и озвучки
у вас выбор такого типа, что ; Languages: eng rus вообще не нужно использовать в секции компонентов

Осталась также проблема с ключами
там в добавление есть ошибка:
Код:
AddKey('2HIVRNBRUVIRN3VJIW{MyRand}');
а надо:
Код:
AddKey('2HIVRNBRUVIRN3VJIW'+ExpandConstant('{Code:MyRand}');
Да и это:
Код:
procedure InitializeWizard;
begin
  InitializeWizard1;
  InitializeWizard2;
  InitializeWizard3;
  InitializeWizard4;
  InitializeWizard5;
  InitializeWizard6;
  InitializeWizard7;
end;
собрать изо всего в единую процедуру
 

AlexZetCrow

Новичок
у вас выбор такого типа, что ; Languages: eng rus вообще не нужно использовать в секции компонентов


там в добавление есть ошибка:
Код:
AddKey('2HIVRNBRUVIRN3VJIW{MyRand}');
а надо:
Код:
AddKey('2HIVRNBRUVIRN3VJIW'+ExpandConstant('{Code:MyRand}');
Да и это:
Код:
procedure InitializeWizard;
begin
  InitializeWizard1;
  InitializeWizard2;
  InitializeWizard3;
  InitializeWizard4;
  InitializeWizard5;
  InitializeWizard6;
  InitializeWizard7;
end;
собрать изо всего в единую процедуру
А как собрать в единую процедуру?
 

AlexZetCrow

Новичок
Такое смотреть тут: Isdone
Спасибо вам большое!)

у вас выбор такого типа, что ; Languages: eng rus вообще не нужно использовать в секции компонентов

- Ну я вроде бы делал выбор компонентов Рус и Англ версий для игры.
Типа какие-то компоненты должны были быть доступны только для определённой группы пользователей. Хорошо я удалю эти элементы

procedure InitializeWizard;
begin
InitializeWizard1;
InitializeWizard2;
InitializeWizard3;
InitializeWizard4;
InitializeWizard5;
InitializeWizard6;
InitializeWizard7;
end;

Разве не правильно у меня написано? В самом конце перед блоком [Run]
 
Сверху