night_dragon_on 5,601 #417701 Posted January 6, 2018 9 минут назад, D_MAN_1987 сказал: получил путь к исполняемому файлу инсталлятора+"\метка_диска" У немя все в норме, распакуй архив поверх примера из шапки. ScriptModPack.zip Перед компиляцией поробуй запусти собранный мною файл в папке "Output" Quote Share this post Link to post Short link Share on other sites
DuMaH_K 15 #417702 Posted January 6, 2018 (edited) 11 минут назад, night_dragon_on сказал: Перед компиляцией поробуй запусти собранный мною файл в папке "Output" ваш экзешник обнаруживает клиент песочницы распаковка поверх примера из шапки и компиляция дает в результате тот же путь что и в моем предыдущем посте Edited January 6, 2018 by D_MAN_1987 Quote Share this post Link to post Short link Share on other sites
night_dragon_on 5,601 #417703 Posted January 6, 2018 (edited) 15 минут назад, D_MAN_1987 сказал: ваш экзешник обнаруживает клиент песочницы Ну я как бы писал что это самый простой пример, в качестве отправной точки. В библиотеке есть функции с помощью которых можно отсортировать клиенты: WOT_GetClientBranch() - Release, Common Test, Super Test, Sandbox Если нужно четкое определение версии клиента, его тип (тест, релиз, песок и т.п) то нужно дополнительные проверки в коде делать. Edited January 6, 2018 by night_dragon_on Quote Share this post Link to post Short link Share on other sites
DuMaH_K 15 #417704 Posted January 6, 2018 @night_dragon_on да, но повторюсь, запуская ваш код у себя, я получаю нечто, вовсе не относящееся к клиенту.. Quote Share this post Link to post Short link Share on other sites
night_dragon_on 5,601 #417705 Posted January 6, 2018 (edited) 12 минут назад, D_MAN_1987 сказал: запуская ваш код у себя, я получаю нечто, вовсе не относящееся к клиенту Ну тут причин множество может быть начиная с того впорядке ли сам компилятор (inno setup), до проблем с самой операционкой. Раз один и тот же код собирается у двух человек по разному, причем во втором случае неработоспособен на выходе. Edited January 6, 2018 by night_dragon_on Quote Share this post Link to post Short link Share on other sites
DuMaH_K 15 #417706 Posted January 6, 2018 (edited) Пробовал выбрать таким способом: #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 и вылетает Edited January 6, 2018 by D_MAN_1987 Quote Share this post Link to post Short link Share on other sites
night_dragon_on 5,601 #417707 Posted January 6, 2018 3 минуты назад, D_MAN_1987 сказал: и вылетает, не приходя в сознание Нужно указывать размер буфера: procedure InitializeWizard(); begin SetLength(Buffer, 1024); Quote Share this post Link to post Short link Share on other sites
DuMaH_K 15 #417709 Posted January 6, 2018 4 минуты назад, night_dragon_on сказал: SetLength(Buffer, 1024); то же самое.. Quote Share this post Link to post Short link Share on other sites
night_dragon_on 5,601 #417711 Posted January 6, 2018 @D_MAN_1987 , а ты уверен что размер буфера задается до того как сама функция вызывается. Quote Share this post Link to post Short link Share on other sites
DuMaH_K 15 #417714 Posted January 6, 2018 procedure WOT_GetClientVersionW(Buffer: String; BufferSize: Integer; ClientIndex: Integer); @night_dragon_on разве размер буфера не указывается при вызове процедуры? Quote Share this post Link to post Short link Share on other sites
Lom 48 #417718 Posted January 6, 2018 (edited) 38 минут назад, night_dragon_on сказал: Ну тут причин множество может быть начиная с того впорядке ли сам компилятор (inno setup), до проблем с самой операционкой. Раз один и тот же код собирается у двух человек по разному, причем во втором случае неработоспособен на выходе. скачал архив что ты ему скинул. запустил экзешник что там есть. он сразу нашел правильно путь к игре. затем вставил код что ты дал но у меня чет не завелся он. точнее компилирует и тд но путь не находит. странно как то. ведь я вписал тот же код что и в том скрипте что ты ему скинул. Edited January 6, 2018 by ЛОМ Quote Share this post Link to post Short link Share on other sites
night_dragon_on 5,601 #417723 Posted January 6, 2018 (edited) 18 минут назад, D_MAN_1987 сказал: разве размер буфера не указывается при вызове процедуры? Факт в том что его нужно отдельно задавать, для чего я не знаю но Mixaill-л может тебе подробнее про это рассказать. 10 минут назад, ЛОМ сказал: затем вставил код что ты дал но у меня чет не завелся он Возможно зависит от: 1) От версии компилятора 2) Базовый вариант или расширенный от ResTools 3) ANSI или Unicode Edited January 6, 2018 by night_dragon_on Quote Share this post Link to post Short link Share on other sites
ktulho 5,790 #417724 Posted January 6, 2018 11 минут назад, night_dragon_on сказал: Факт в том что его нужно отдельно задавать, для чего я не знаю но Mixaill-л может тебе подробнее про это рассказать. SetLength(Buffer, 1024); Эта функция выделяет место в памяти на которую указывает переменная Buffer. Выделять память необходимо до вызова функции WOT_GetClientVersionW 30 минут назад, D_MAN_1987 сказал: разве размер буфера не указывается при вызове процедуры? Указывается. Можно так: WOT_GetClientVersionW(Buffer, Length(Buffer) - 1, Index); Quote Share this post Link to post Short link Share on other sites
Lom 48 #417726 Posted January 6, 2018 13 минут назад, night_dragon_on сказал: Факт в том что его нужно отдельно задавать, для чего я не знаю но Mixaill-л может тебе подробнее про это рассказать. Возможно зависит от: 1) От версии компилятора 2) Базовый вариант или расширенный от ResTools 3) ANSI или Unicode вот что у меня. Quote Share this post Link to post Short link Share on other sites
night_dragon_on 5,601 #417727 Posted January 6, 2018 1 минуту назад, ЛОМ сказал: вот что у меня Китайщина от ResTools, у меня базовая версии 5.5.9 Quote Share this post Link to post Short link Share on other sites
Lom 48 #417729 Posted January 6, 2018 13 минут назад, night_dragon_on сказал: Китайщина от ResTools, у меня базовая версии 5.5.9 мдааа. скачал ша и поставил версию 5.5.9. мой рабочий скрипт ваще не заводится))) ошибки выдает))) а в китайской всё пучком))) Quote Share this post Link to post Short link Share on other sites
night_dragon_on 5,601 #417731 Posted January 6, 2018 @ЛОМ , в китайке добавлено множество своих функций, кторых нет в стандарте. От этого ошибки лезут ввиду их отстутствия. Quote Share this post Link to post Short link Share on other sites
DuMaH_K 15 #417733 Posted January 6, 2018 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; тупо пустая строка пути.. Quote Share this post Link to post Short link Share on other sites
ktulho 5,790 #417736 Posted January 6, 2018 (edited) @D_MAN_1987 Где процедура SetLength(Buffer, 1024); ? 35 минут назад, ktulho сказал: SetLength(Buffer, 1024); Эта функция выделяет место в памяти на которую указывает переменная Buffer. Выделять память необходимо до вызова функции WOT_GetClientVersionW Edited January 6, 2018 by ktulho Quote Share this post Link to post Short link Share on other sites
DuMaH_K 15 #417738 Posted January 6, 2018 @ktulho procedure InitializeWizard(); begin SetLength(Buffer, 1024); Quote Share this post Link to post Short link Share on other sites