Jump to content
Korean Random
EvilAlex

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

Recommended Posts

9 минут назад, D_MAN_1987 сказал:

получил путь к исполняемому файлу инсталлятора+"\метка_диска"

 

У немя все в норме, распакуй архив поверх примера из шапки. ScriptModPack.zip

Перед компиляцией поробуй запусти собранный мною файл в папке "Output"

 



be3e53e8755e.png

Share this post


Link to post

Short link
Share on other sites
11 минут назад, night_dragon_on сказал:

Перед компиляцией поробуй запусти собранный мною файл в папке "Output"

ваш экзешник обнаруживает клиент песочницы

 

2018-01-06_165958.png.0583d1bbfd55d6682974b015f6b17b1d.png

распаковка поверх примера из шапки и компиляция дает в результате тот же путь что и в моем предыдущем посте

Edited by D_MAN_1987

Share this post


Link to post

Short link
Share on other sites
15 минут назад, D_MAN_1987 сказал:

ваш экзешник обнаруживает клиент песочницы

 

Ну я как бы писал что это самый простой пример, в качестве отправной точки.

В библиотеке есть функции с помощью которых можно отсортировать клиенты:

WOT_GetClientBranch() - Release, Common Test, Super Test, Sandbox

Если нужно четкое определение версии клиента, его тип (тест, релиз, песок и т.п) то нужно дополнительные проверки в коде делать.

Edited by night_dragon_on

Share this post


Link to post

Short link
Share on other sites
12 минут назад, D_MAN_1987 сказал:

запуская ваш код у себя, я получаю нечто, вовсе не относящееся к клиенту

 

Ну тут причин множество может быть начиная с того впорядке ли сам компилятор (inno setup), до проблем с самой операционкой.

Раз один и тот же код собирается у двух человек по разному, причем во втором случае неработоспособен на выходе.

Edited by night_dragon_on

Share this post


Link to post

Short link
Share on other sites

Пробовал выбрать таким способом:

 

#include "findwot.iss"

[Files]

Source: Files\findwot.dll; DestDir: "{tmp}"; Flags: ignoreVersion dontcopy;

 

var  

Buffer:String;

function WotDir (Path: String): String;

var  

ClientsCount, Index: Integer;  

Str: String; begin  

ClientsCount:= WOT_GetClientsCount();  

if ClientsCount > 0 then

  begin

    for Index:=1 to ClientsCount do

      begin

      WOT_GetClientVersionW(Buffer,1024,Index);

      Str:=Copy(Buffer,0,Pos(#0, Buffer));

      case WOT_GetClientBranch(Index) of     //выбираем тип клиента

         1: begin                                      //релиз

              WOT_GetClientPathW(Buffer,1024,Index);

              Result:=ExpandConstant(Buffer);

            end;

         end;

        end;  

   end; 

end;

 

 

в лог выдает

 

 


[17:25:33,190] *** Setup started [17:25:33,497] Setup version: Inno Setup version 5.5.9 (a) [17:25:33,498] Original Setup EXE: D:\Games\Для WOT\МодПак\oleni\Output\OLENI_v17.exe [17:25:33,499] Setup command line: /SL5="$350A56,560234,215552,D:\Games\Для WOT\МодПак\oleni\Output\OLENI_v17.exe" /SPAWNWND=$3C111C /NOTIFYWND=$3F104C /DEBUGWND=$4F0612 [17:25:33,501] Windows version: 10.0.16299 (NT platform: Yes) [17:25:33,502] 64-bit Windows: Yes [17:25:33,503] Processor architecture: x64 [17:25:33,505] User privileges: Administrative [17:25:33,534] 64-bit install mode: No [17:25:33,536] Created temporary directory: C:\Users\0D0B~1\AppData\Local\Temp\is-RE0OL.tmp [17:25:33,541] Extracting temporary file: C:\Users\0D0B~1\AppData\Local\Temp\is-RE0OL.tmp\findwot.dll [17:25:37,452] *** Setup exit code: 0xC0000409

 

 

и вылетает

 

 


2018-01-06_172734.thumb.png.ece6fa05a0fe53d0cc7b1b7d83214a81.png
 

 

Edited by D_MAN_1987

Share this post


Link to post

Short link
Share on other sites
3 минуты назад, D_MAN_1987 сказал:

и вылетает, не приходя в сознание

 

Нужно указывать размер буфера:

procedure InitializeWizard();
begin
  SetLength(Buffer, 1024);

 

Share this post


Link to post

Short link
Share on other sites
procedure WOT_GetClientVersionW(Buffer: String; BufferSize: Integer; ClientIndex: Integer);

@night_dragon_on разве размер буфера не указывается при вызове процедуры?

2018-01-06_174633.png.6fad6efba99675b37666feb8f17326b2.png

 

Share this post


Link to post

Short link
Share on other sites
38 минут назад, night_dragon_on сказал:

 

Ну тут причин множество может быть начиная с того впорядке ли сам компилятор (inno setup), до проблем с самой операционкой.

Раз один и тот же код собирается у двух человек по разному, причем во втором случае неработоспособен на выходе.

 

скачал архив что ты ему скинул. запустил экзешник что там есть. он сразу нашел правильно путь к игре. затем вставил код что ты дал но у меня чет не завелся он. точнее компилирует и тд но путь не находит. странно как то. ведь я вписал тот же код что и в том скрипте что ты ему скинул.

Edited by ЛОМ

Share this post


Link to post

Short link
Share on other sites
18 минут назад, D_MAN_1987 сказал:

разве размер буфера не указывается при вызове процедуры?

 

Факт в том что его нужно отдельно задавать, для чего я не знаю но Mixaill-л может тебе подробнее про это рассказать.

 

10 минут назад, ЛОМ сказал:

затем вставил код что ты дал но у меня чет не завелся он

 

Возможно зависит от:

1) От версии компилятора

2) Базовый вариант или расширенный от ResTools

3) ANSI или Unicode

Edited by night_dragon_on

Share this post


Link to post

Short link
Share on other sites
11 минут назад, night_dragon_on сказал:

Факт в том что его нужно отдельно задавать, для чего я не знаю но Mixaill-л может тебе подробнее про это рассказать.

SetLength(Buffer, 1024);

Эта функция выделяет место в памяти на которую указывает переменная Buffer. Выделять память необходимо до вызова функции WOT_GetClientVersionW

30 минут назад, D_MAN_1987 сказал:

разве размер буфера не указывается при вызове процедуры?

Указывается. Можно так:

WOT_GetClientVersionW(Buffer, Length(Buffer) - 1, Index);

 

Share this post


Link to post

Short link
Share on other sites
13 минут назад, night_dragon_on сказал:

 

Факт в том что его нужно отдельно задавать, для чего я не знаю но Mixaill-л может тебе подробнее про это рассказать.

 

 

Возможно зависит от:

1) От версии компилятора

2) Базовый вариант или расширенный от ResTools

3) ANSI или Unicode

 

вот что у меня.

 

3YAy_EawTS2USJNe5hkPTQ.jpeg

Share this post


Link to post

Short link
Share on other sites
1 минуту назад, ЛОМ сказал:

вот что у меня

 

Китайщина от ResTools, у меня базовая версии 5.5.9

Share this post


Link to post

Short link
Share on other sites
13 минут назад, night_dragon_on сказал:

 

Китайщина от ResTools, у меня базовая версии 5.5.9

 

мдааа. скачал ша и поставил версию 5.5.9. мой рабочий скрипт ваще не заводится))) ошибки выдает))) а в китайской всё пучком)))

Share this post


Link to post

Short link
Share on other sites

@ЛОМ , в китайке добавлено множество своих функций, кторых нет в стандарте. От этого ошибки лезут ввиду их отстутствия.

Share this post


Link to post

Short link
Share on other sites
32 минуты назад, ktulho сказал:

WOT_GetClientVersionW(Buffer, Length(Buffer) - 1, Index);

подставил этот вариант, не вылетает, но и не определяет (точнее не присваивает нужное) значение

function WotDir (Path: String): String;
var
  ClientsCount, Index: Integer;
  Str: String;
begin
  ClientsCount:= WOT_GetClientsCount();

  if ClientsCount > 0 then
  begin
    for Index:=1 to ClientsCount do 
    begin
      WOT_GetClientVersionW(Buffer,Length(Buffer)-1,Index);
//      Str:=Copy(Buffer,0,Pos(#0, Buffer));

      case WOT_GetClientBranch(Index) of     //выбираем тип клиента
         1: begin                                      //релиз
              WOT_GetClientPathW(Buffer,Length(Buffer)-1,Index);
              Result:=ExpandConstant(Buffer);
            end;
         2: begin                                      //
              WOT_GetClientPathW(Buffer,Length(Buffer)-1,Index);
              Result:=ExpandConstant(Buffer);
            end;                               
         3: begin                                      //
              WOT_GetClientPathW(Buffer,Length(Buffer)-1,Index);
              Result:=ExpandConstant(Buffer);
            end;                               
         4: begin                                      //
              WOT_GetClientPathW(Buffer,Length(Buffer)-1,Index);
              Result:=ExpandConstant(Buffer);
            end;                               
      end;
       
    end;
  end; 

end;

тупо пустая строка пути..

Share this post


Link to post

Short link
Share on other sites

@D_MAN_1987 Где процедура 

SetLength(Buffer, 1024);

?

35 минут назад, ktulho сказал:

SetLength(Buffer, 1024);

Эта функция выделяет место в памяти на которую указывает переменная Buffer. Выделять память необходимо до вызова функции WOT_GetClientVersionW

 

Edited by ktulho

Share this post


Link to post

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...