Jump to content
Korean Random

Создание инсталляторов для модпаков на базе Inno Setup


Recommended Posts

Код рабочий.

Ищи ошибку в своих действиях.

kak tam tak i u menea kod

Код рабочий.

Ищи ошибку в своих действиях.

nu scaji pajalusta gde ashibka ea uja poldnea siju i ne magu delati atat script!

Link to comment
Short link
Share on other sites

Вопрос, конечно, тупой, но ты ведь не вводишь в поле пароля сам хэш?

net

vot paroli 1122123 

http://www.sha1-online.com/

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName=My Program

[Code]

var
  Passwords: array of string;

function CheckPassword(Password: String): Boolean;
var
  Index: Integer;
  SHA1: string;
begin
  if GetArrayLength(Passwords) = 0 then
  begin
    Log('Initializing hashes');
    SetArrayLength(Passwords, 5);
    Passwords[0] := 'b255e7697a6b954be38167a5b581196c24b7b3d6'; //passwords 1122123
    Passwords[1] := 'b78baf5db4b1498ed075b8e6accd0b5ff51e20ec';
    Passwords[2] := 'aaf70585b9a2662c911392b7573c739cecea0e56';
    Passwords[3] := '3ab4222e2d0000012e6c7381437178fab398e8aa';
    Passwords[4] := '5473ccc879a8167a6a77b387a916f7c9ca05894f';
  end;

  Index := 0;
  SHA1 := GetSHA1OfUnicodeString(Password);
  for Index := 0 to GetArrayLength(Passwords) - 1 do
  begin
    if SHA1 = Passwords[Index] then
    begin
      Log(Format('Password matches hash %d', [Index]));
      Result := True;
      Exit;
    end;
  end;

  Log(Format('Password matches nothing our of %d hashes', [GetArrayLength(Passwords)]));
  Result := False;
end; 

Edited by asterix93
Link to comment
Short link
Share on other sites

@asterix93, а теперь смотри, в чём твоя ошибка... На сайте вычисляется Ansi`шный SHA1 (его же ты и вносишь в "допустимые"), а в коде проверяется Unicode`ный хэш. Понятное дело, что они не будут совпадать. Поэтому используй что-то одно.

Edited by Kotyarko_O
Link to comment
Short link
Share on other sites

@asterix93, а теперь смотри, в чём твоя ошибка... На сайте вычисляется Ansi`шный SHA1 (его же ты и вносишь в "допустимые"), а в коде проверяется Unicode`ный хэш. Понятное дело, что они не будут совпадать. Поэтому используй что-то одно.

vot kakea ashibka daiot v ANSI

 

@asterix93, а теперь смотри, в чём твоя ошибка... На сайте вычисляется Ansi`шный SHA1 (его же ты и вносишь в "допустимые"), а в коде проверяется Unicode`ный хэш. Понятное дело, что они не будут совпадать. Поэтому используй что-то одно.

Pamamghi delati atat script  pajalusta gde ashibka

post-33758-0-06796300-1456672466_thumb.jpg

Edited by asterix93
Link to comment
Short link
Share on other sites

@asterix93, если говорится об Ansi или Unicode, то это не значит, что речь идёт о версии компилятора.

На Ansi-версии компилятора нет юникодной функции GetSHA1OfUnicodeString, есть только GetSHA1OfString. Её тебе и надо было изначально использовать (тут всё описывал).

Edited by Kotyarko_O
Link to comment
Short link
Share on other sites

Тут уже без матов не обойтись. Мало того, что из-за транслита глаза можно сломать, так ещё и человек как пень просто...

Первое конечно лечится установкой виртуальной клавиатуры (но зачем вообще думать о людях?), но вот со вторым что делать...

  • Upvote 2
Link to comment
Short link
Share on other sites

Тут уже без матов не обойтись. Мало того, что из-за транслита глаза можно сломать, так ещё и человек как пень просто...

Первое конечно лечится установкой виртуальной клавиатуры (но зачем вообще думать о людях?), но вот со вторым что делать...

прастите сто еа мучл вас но мне не удобна писаи на рускам ужэ буду писати 

Edited by asterix93
Link to comment
Short link
Share on other sites

прастите сто еа мучл вас но мне не удобна писаи на рускам ужэ буду писати

Убил просто )))) уж пишите в английской
Link to comment
Short link
Share on other sites

Ребята помогите. Все ни как, ну ни как не пойму как добавить картинки к компонентам. Разжуйте дебилу пожалуйста как это сделать, а то я туговато в этом всем понимаю. Заранее спасибо.

P.S. Если есть видео как это сделать скиньте пожалуйста.

 

9KhkZiGdxN8.jpg

Link to comment
Short link
Share on other sites

а первые 10 стр не прочесть?

[Setup]
AppName=Моя программа
AppVersion=1.5
DefaultDirName={pf}\Моя программа

[CustomMessages]
CompName1=Компонент 1
CompName2=Компонент 2

ComponentsImgInfo=Наведите курсор мыши на компонент, чтобы посмотреть его превью.

CompDesc1=Описание первого компонента
CompDesc2=Описание второго компонента

[Files]
Source: "compiler:WizModernImage.bmp"; DestName: "CompDescImg1.bmp"; Flags: dontcopy
Source: "compiler:WizModernImage-IS.bmp"; DestName: "CompDescImg2.bmp"; Flags: dontcopy
Source: "compiler:WizModernImage.bmp"; DestName: "MainPic.bmp"; Flags: dontcopy

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: comp1; Description: "{cm:CompName1}"; Types: full
Name: comp2; Description: "{cm:CompName2}"; Types: full
Name: comp3; Description: "{cm:CompName1}"; Types: full
Name: comp4; Description: "{cm:CompName2}"; Types: full
Name: comp5; Description: "{cm:CompName1}"; Types: full
Name: comp6; Description: "{cm:CompName2}"; Types: full
Name: comp7; Description: "{cm:CompName1}"; Types: full
Name: comp8; Description: "{cm:CompName2}"; Types: full

[Code]
type
  TComponentDesc = record
    ImageName: String;
    Index: Integer;
  end;

var
  CompDescs: array of TComponentDesc;
  CompDescImgPanel: TPanel;
  CompIndex, LastIndex: Integer;
  CompDescImg: TBitmapImage;

procedure ShowCompDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);
var
  i: Integer;
begin
  if Index = LastIndex then Exit;
  CompIndex := -1;
  for i := 0 to GetArrayLength(CompDescs) -1 do
  begin
    if (CompDescs[i].Index = Index) then
    begin
      CompIndex := i;
      Break;
    end;
  end;
  if (CompIndex >= 0) and (Area = iaItem) then
  begin
    if not FileExists(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName) then
      ExtractTemporaryFile(CompDescs[CompIndex].ImageName);
    CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName);
   CompDescImg.Show;
end else
begin
CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MainPic.bmp'));
end;
LastIndex := Index;
end;

procedure CompListMouseLeave(Sender: TObject);
begin
  LastIndex := -1;
 CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MainPic.bmp'));
end;

procedure AddCompDescription(AIndex: Integer; AImageName: String);
var
  i: Integer;
begin
  i := GetArrayLength(CompDescs);
  SetArrayLength(CompDescs, i + 1);
  CompDescs[i].ImageName := AImageName;
  CompDescs[i].Index := AIndex - 1
end;

function GetComponentIndex(Name: String): Integer;
var
  i: Integer;
begin
  Result:= -1;
  for i:= 0 to WizardForm.ComponentsList.ItemCount-1 do begin
    if (WizardForm.ComponentsList.ItemCaption[i] = Name) then begin
      Result:= i + 1;
      Break;
    end;
  end;
end;

procedure InitializeWizard();
begin
  ExtractTemporaryFile('MainPic.bmp');
  WizardForm.SelectComponentsLabel.Hide;
  WizardForm.TypesCombo.Hide;
  WizardForm.ComponentsList.SetBounds(ScaleX(0), ScaleY(0), ScaleX(184), ScaleY(200));
  WizardForm.ComponentsList.OnItemMouseMove:= @ShowCompDescription;
  WizardForm.ComponentsList.OnMouseLeave := @CompListMouseLeave;

  CompDescImgPanel := TPanel.Create(WizardForm);
  with CompDescImgPanel do
  begin
    Parent := WizardForm.SelectComponentsPage;
    SetBounds(ScaleX(192), ScaleY(0), ScaleX(225), ScaleY(120));
    BevelInner := bvLowered;
  end;

  CompDescImg := TBitmapImage.Create(WizardForm);
  with CompDescImg do
  begin
    Parent := CompDescImgPanel;
    SetBounds(ScaleX(5), ScaleY(5), CompDescImgPanel.Width - ScaleX(10), CompDescImgPanel.Height - ScaleY(10));
    Stretch := True;
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\MainPic.bmp'));
  end;

  AddCompDescription(GetComponentIndex(CustomMessage('CompName1')), 'CompDescImg1.bmp');  //по названию компонента
  AddCompDescription(GetComponentIndex(CustomMessage('CompName2')), 'CompDescImg2.bmp');  //по названию компонента
end;

  • Upvote 1
Link to comment
Short link
Share on other sites

а первые 10 стр не прочесть?

[Setup]
AppName=Моя программа
AppVersion=1.5
DefaultDirName={pf}\Моя программа

[CustomMessages]
CompName1=Компонент 1
CompName2=Компонент 2

ComponentsImgInfo=Наведите курсор мыши на компонент, чтобы посмотреть его превью.

CompDesc1=Описание первого компонента
CompDesc2=Описание второго компонента

[Files]
Source: "compiler:WizModernImage.bmp"; DestName: "CompDescImg1.bmp"; Flags: dontcopy
Source: "compiler:WizModernImage-IS.bmp"; DestName: "CompDescImg2.bmp"; Flags: dontcopy
Source: "compiler:WizModernImage.bmp"; DestName: "MainPic.bmp"; Flags: dontcopy

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: comp1; Description: "{cm:CompName1}"; Types: full
Name: comp2; Description: "{cm:CompName2}"; Types: full
Name: comp3; Description: "{cm:CompName1}"; Types: full
Name: comp4; Description: "{cm:CompName2}"; Types: full
Name: comp5; Description: "{cm:CompName1}"; Types: full
Name: comp6; Description: "{cm:CompName2}"; Types: full
Name: comp7; Description: "{cm:CompName1}"; Types: full
Name: comp8; Description: "{cm:CompName2}"; Types: full

[Code]
type
  TComponentDesc = record
    ImageName: String;
    Index: Integer;
  end;

var
  CompDescs: array of TComponentDesc;
  CompDescImgPanel: TPanel;
  CompIndex, LastIndex: Integer;
  CompDescImg: TBitmapImage;

procedure ShowCompDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);
var
  i: Integer;
begin
  if Index = LastIndex then Exit;
  CompIndex := -1;
  for i := 0 to GetArrayLength(CompDescs) -1 do
  begin
    if (CompDescs[i].Index = Index) then
    begin
      CompIndex := i;
      Break;
    end;
  end;
  if (CompIndex >= 0) and (Area = iaItem) then
  begin
    if not FileExists(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName) then
      ExtractTemporaryFile(CompDescs[CompIndex].ImageName);
    CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName);
   CompDescImg.Show;
end else
begin
CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MainPic.bmp'));
end;
LastIndex := Index;
end;

procedure CompListMouseLeave(Sender: TObject);
begin
  LastIndex := -1;
 CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\MainPic.bmp'));
end;

procedure AddCompDescription(AIndex: Integer; AImageName: String);
var
  i: Integer;
begin
  i := GetArrayLength(CompDescs);
  SetArrayLength(CompDescs, i + 1);
  CompDescs[i].ImageName := AImageName;
  CompDescs[i].Index := AIndex - 1
end;

function GetComponentIndex(Name: String): Integer;
var
  i: Integer;
begin
  Result:= -1;
  for i:= 0 to WizardForm.ComponentsList.ItemCount-1 do begin
    if (WizardForm.ComponentsList.ItemCaption[i] = Name) then begin
      Result:= i + 1;
      Break;
    end;
  end;
end;

procedure InitializeWizard();
begin
  ExtractTemporaryFile('MainPic.bmp');
  WizardForm.SelectComponentsLabel.Hide;
  WizardForm.TypesCombo.Hide;
  WizardForm.ComponentsList.SetBounds(ScaleX(0), ScaleY(0), ScaleX(184), ScaleY(200));
  WizardForm.ComponentsList.OnItemMouseMove:= @ShowCompDescription;
  WizardForm.ComponentsList.OnMouseLeave := @CompListMouseLeave;

  CompDescImgPanel := TPanel.Create(WizardForm);
  with CompDescImgPanel do
  begin
    Parent := WizardForm.SelectComponentsPage;
    SetBounds(ScaleX(192), ScaleY(0), ScaleX(225), ScaleY(120));
    BevelInner := bvLowered;
  end;

  CompDescImg := TBitmapImage.Create(WizardForm);
  with CompDescImg do
  begin
    Parent := CompDescImgPanel;
    SetBounds(ScaleX(5), ScaleY(5), CompDescImgPanel.Width - ScaleX(10), CompDescImgPanel.Height - ScaleY(10));
    Stretch := True;
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\MainPic.bmp'));
  end;

  AddCompDescription(GetComponentIndex(CustomMessage('CompName1')), 'CompDescImg1.bmp');  //по названию компонента
  AddCompDescription(GetComponentIndex(CustomMessage('CompName2')), 'CompDescImg2.bmp');  //по названию компонента
end;

Мне даже это не понятно к великому сожалению(((( 

Link to comment
Short link
Share on other sites

 

 

а первые 10 стр не прочесть? Мне даже это не понятно к великому сожалению(((( 

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

Link to comment
Short link
Share on other sites

Мне даже это не понятно к великому сожалению(((( 

На офсайте с разделе Околоигровой софт есть программка, позволяющая собрать модпак. Если желания нет разбираться, то JMPACK вам подойдет.

Link to comment
Short link
Share on other sites

Скоро выложу новую версию инсталлятора с исходниками.

Будет полноценный веб-инсталлятор размером до 1MB, управляемый с сервера обновлений.

Редактируя конфигурацию на сервере обновлений, можно включать/отключать компоненты, делать их неизменяемыми вручную ( 'fixed'), изменять описание/версии на различных языках, добавлять новые компоненты (моды) и т.п. без перекомпиляции инсталлятора.

Содержит функцию проверки обновлений самого инсталлятора.

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

v.6

  1. Веб-инсталлятор, управляемый с сервера обновлений с помощью текстовой конфигурации;
  2. Все компоненты (моды) находятся на сервере обновлений, загружаются и устанавливаются только выбранные пользователем моды, а также базовые;
  3. Редактируя конфигурацию на сервере обновлений, можно включать/отключать компоненты, делать их неизменяемыми вручную ( 'fixed'), изменять описание/версии на различных языках, добавлять новые компоненты (моды) и т.п. без перекомпиляции инсталлятора. В связи с этим, нет необходимости при выходе новой версии модпака загружать новый инсталлятор. Перекомпиляция инсталлятора по сути необходима только для исправления ошибок самого инсталлятора/добавления новых возможностей;
  4. Не требует прав администратора для установки (не отменяет необходимость наличия прав на запись в папки клиента World of Tanks);
  5. Перед установкой связывается с сервером обновлений модпака и проверяет наличие обновлений инсталлятора. Если есть новая версия - предлагает перейти на страницу его загрузки;
  6. Перед установкой создает резервную копию папки res_mods в папке с именем wotunion_modpack_backups\res_mods_[date]_[time] в папке клиента World of Tanks (создание резервной копии можно отключить, но это не рекомендуется, так как текущая папка res_mods будет удалена). Так как в папках резервных копий могут находится копии файлов из res\audio, необходимые для работы различных звуковых модов, которые занимают значительное место на диске, пожалуйста следите за размером папки резервных копий и удаляйте ненужные резервные копии;
  7. В этой версии удален деинсталлятор, поэтому восстанавливать из резервной копии при необходимости следует вручную. Сделано это для упрощения обновлений модпака;
  8. Для избежания конфликтов модов, устанавливается только в чистую папку res_mods после создания ее резервной копии;
  9. Инсталлятор не создает файлов/папок за пределами папки клиента World of Tanks и папок временных файлов, создаваемых Inno Setup;
  10. Исполняемый файл инсталлятора автор выкладывает только на форуме koreanrandom.com. Не скачивайте инсталлятор из любых других источников. Инсталлятор также сверяет свою контрольную сумму с контрольной суммой, указанной в конфигурации;
  11. Инсталлятор, для доступа к серверу обновлений, а также открытия темы на форуме koreanrandom.com, использует сокращенные ссылки сервисов goo.gl и bit.ly;
  12. Инсталлятор содержит русскую, украинскую и английскую локализации;
  13. Инсталлятор использует для распаковки архивов 7zdec.exe (7-zip archive unpacker .7z Any / x86 / x64 LZMA SDK: (C, C++, C#, Java) (7zdec.exe) (http://www.7-zip.org/download.html));
  14. Скрипты/код инсталлятора созданы в Inno Script Studio v.2.2.2.32 (20151020-065430) и скомпилированы Inno Setup Compiler v.5.5.8 (u)
  15. Инсталлятор использует DwinsHs (Downloader for Inno Setup) Version: 1.1.2.118 (For Inno Setup 5.x) (http://www.han-soft.com/dwinshs.php) - не .dll, открытый код на Паскале;
  16. Узнать о установленной версии модпака можно в файле res_mods\wotunion_modpack_info.txt;
  17. Автор гарантирует отсутствие вредоносного кода в инсталляторе. Замечено периодическое детектирование одним из антивирусов на VirusTotal.com, с чем, естественно, ничего поделать не могу. Связано с самим генерируемым InnoSetup кодом, поскольку .exe на основе пустого визардовского скрипта Inno Setup 5.5.8 (u) также детектируется на VirusTotal.com этим антивирусом;
  18. Исходные коды предоставляю по запросу в личку форумчанам koreanrandom.com;
  19. Инсталлятор предоставляется про принципу "как есть".

Исходные коды предоставляю по запросу в личку форумчанам koreanrandom.com после 15.03.2016 (надо отформатировать код).

Edited by wotunion
  • Upvote 5
Link to comment
Short link
Share on other sites

Согласен, когда падает Tier III датацентр это печально)

Если серьезно, допустимый даунтайм такого уровня - 95мин в год.

Кстати, dwinshs позволяет зеркала настроить если что)

Да и хостинг не бесплатный, за 4 месяца в офлайн не уходил.

А по нагрузке - посмотрю напишу, модпак не популярный, так, в свободное время делается.

Edited by wotunion
Link to comment
Short link
Share on other sites

Памагите паялуста со скрипт на уведомление выхода обновления модпака для 0.9.14 у меня ести но не работает!!!

Поищите по ветке, страниц 10 назад Ekspoint выкладывал апдейтер.

Link to comment
Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...