night_dragon_on Posted January 6, 2018 Share Posted January 6, 2018 9 минут назад, D_MAN_1987 сказал: получил путь к исполняемому файлу инсталлятора+"\метка_диска" У немя все в норме, распакуй архив поверх примера из шапки. ScriptModPack.zip Перед компиляцией поробуй запусти собранный мною файл в папке "Output" @ Quote Link to comment Short link Share on other sites More sharing options...
DuMaH_K Posted January 6, 2018 Share Posted January 6, 2018 (edited) 11 минут назад, night_dragon_on сказал: Перед компиляцией поробуй запусти собранный мною файл в папке "Output" ваш экзешник обнаруживает клиент песочницы распаковка поверх примера из шапки и компиляция дает в результате тот же путь что и в моем предыдущем посте Edited January 6, 2018 by D_MAN_1987 @ Quote Link to comment Short link Share on other sites More sharing options...
night_dragon_on Posted January 6, 2018 Share 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 Link to comment Short link Share on other sites More sharing options...
DuMaH_K Posted January 6, 2018 Share Posted January 6, 2018 @night_dragon_on да, но повторюсь, запуская ваш код у себя, я получаю нечто, вовсе не относящееся к клиенту.. @ Quote Link to comment Short link Share on other sites More sharing options...
night_dragon_on Posted January 6, 2018 Share Posted January 6, 2018 (edited) 12 минут назад, D_MAN_1987 сказал: запуская ваш код у себя, я получаю нечто, вовсе не относящееся к клиенту Ну тут причин множество может быть начиная с того впорядке ли сам компилятор (inno setup), до проблем с самой операционкой. Раз один и тот же код собирается у двух человек по разному, причем во втором случае неработоспособен на выходе. Edited January 6, 2018 by night_dragon_on @ Quote Link to comment Short link Share on other sites More sharing options...
DuMaH_K Posted January 6, 2018 Share 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 Link to comment Short link Share on other sites More sharing options...
night_dragon_on Posted January 6, 2018 Share Posted January 6, 2018 3 минуты назад, D_MAN_1987 сказал: и вылетает, не приходя в сознание Нужно указывать размер буфера: procedure InitializeWizard(); begin SetLength(Buffer, 1024); @ Quote Link to comment Short link Share on other sites More sharing options...
DuMaH_K Posted January 6, 2018 Share Posted January 6, 2018 4 минуты назад, night_dragon_on сказал: SetLength(Buffer, 1024); то же самое.. @ Quote Link to comment Short link Share on other sites More sharing options...
night_dragon_on Posted January 6, 2018 Share Posted January 6, 2018 @D_MAN_1987 , а ты уверен что размер буфера задается до того как сама функция вызывается. @ Quote Link to comment Short link Share on other sites More sharing options...
DuMaH_K Posted January 6, 2018 Share Posted January 6, 2018 procedure WOT_GetClientVersionW(Buffer: String; BufferSize: Integer; ClientIndex: Integer); @night_dragon_on разве размер буфера не указывается при вызове процедуры? @ Quote Link to comment Short link Share on other sites More sharing options...
Lom Posted January 6, 2018 Share Posted January 6, 2018 (edited) 38 минут назад, night_dragon_on сказал: Ну тут причин множество может быть начиная с того впорядке ли сам компилятор (inno setup), до проблем с самой операционкой. Раз один и тот же код собирается у двух человек по разному, причем во втором случае неработоспособен на выходе. скачал архив что ты ему скинул. запустил экзешник что там есть. он сразу нашел правильно путь к игре. затем вставил код что ты дал но у меня чет не завелся он. точнее компилирует и тд но путь не находит. странно как то. ведь я вписал тот же код что и в том скрипте что ты ему скинул. Edited January 6, 2018 by ЛОМ @ Quote Link to comment Short link Share on other sites More sharing options...
night_dragon_on Posted January 6, 2018 Share 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 Link to comment Short link Share on other sites More sharing options...
ktulho Posted January 6, 2018 Share 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 Link to comment Short link Share on other sites More sharing options...
Lom Posted January 6, 2018 Share Posted January 6, 2018 13 минут назад, night_dragon_on сказал: Факт в том что его нужно отдельно задавать, для чего я не знаю но Mixaill-л может тебе подробнее про это рассказать. Возможно зависит от: 1) От версии компилятора 2) Базовый вариант или расширенный от ResTools 3) ANSI или Unicode вот что у меня. @ Quote Link to comment Short link Share on other sites More sharing options...
night_dragon_on Posted January 6, 2018 Share Posted January 6, 2018 1 минуту назад, ЛОМ сказал: вот что у меня Китайщина от ResTools, у меня базовая версии 5.5.9 @ Quote Link to comment Short link Share on other sites More sharing options...
Lom Posted January 6, 2018 Share Posted January 6, 2018 13 минут назад, night_dragon_on сказал: Китайщина от ResTools, у меня базовая версии 5.5.9 мдааа. скачал ша и поставил версию 5.5.9. мой рабочий скрипт ваще не заводится))) ошибки выдает))) а в китайской всё пучком))) @ Quote Link to comment Short link Share on other sites More sharing options...
night_dragon_on Posted January 6, 2018 Share Posted January 6, 2018 @ЛОМ , в китайке добавлено множество своих функций, кторых нет в стандарте. От этого ошибки лезут ввиду их отстутствия. @ Quote Link to comment Short link Share on other sites More sharing options...
DuMaH_K Posted January 6, 2018 Share 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 Link to comment Short link Share on other sites More sharing options...
ktulho Posted January 6, 2018 Share 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 Link to comment Short link Share on other sites More sharing options...
DuMaH_K Posted January 6, 2018 Share Posted January 6, 2018 @ktulho procedure InitializeWizard(); begin SetLength(Buffer, 1024); @ Quote Link to comment Short link Share on other sites More sharing options...
Recommended Posts
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.