Инсталлятор для индикатора

 

Задача состоит в копировании файлов индикатора в нужные папки. 
Сложность в том, что для работы индикатора нужно разместить необходимые файлы в три папки:
1. в TERMINAL_PATH - файлы библиотеки SSL

2. в TERMINAL_DATA_PATH - сам файл индикатора

3. в TERMINAL_COMMONDATA_PATH - вспомогательный файл 

Так же на рабочем компьютере может быть несколько терминалов, соответственно либо нужно как-то выбирать нужный или устанавливать во все.


Первое, что приходит в голову сделать исполняемый файл установщика (.exe), считать пути из реестра (если они там есть) и скопировать файлы в нудные места.

Может кто-то предложит более простое решение?

Не хочется использовать exe инсталлятор, т.к. с ним тоже могут возникнуть проблемы с антивирусами и другими защитами ОС. Может возможно обойтись bat файлом?

 
Petr Vorob'ev:

Задача состоит в копировании файлов индикатора в нужные папки. 
Сложность в том, что для работы индикатора нужно разместить необходимые файлы в три папки:
1. в TERMINAL_PATH - файлы библиотеки SSL

2. в TERMINAL_DATA_PATH - сам файл индикатора

3. в TERMINAL_COMMONDATA_PATH - вспомогательный файл 

Так же на рабочем компьютере может быть несколько терминалов, соответственно либо нужно как-то выбирать нужный или устанавливать во все.


Первое, что приходит в голову сделать исполняемый файл установщика (.exe), считать пути из реестра (если они там есть) и скопировать файлы в нудные места.

Может кто-то предложит более простое решение?

Не хочется использовать exe инсталлятор, т.к. с ним тоже могут возникнуть проблемы с антивирусами и другими защитами ОС. Может возможно обойтись bat файлом?

по хорошему, в TERMINAL_PATH ничего класть нельзя, считайте что он "чужой". Им управляет и за него отвечает инсталлятор терминала. Все exe, dll и прочие файлы там - от MQ

каталогов TERMINAL_DATA_PATH может быть больше одного. Более того, это типично так - как минимум 2 инстанса терминалов, подчас portable. У пользователя надо будет спрашивать куда именно ставить вашу нетленку.

так что реальный выход - действительно писать инсталлятор, правильно располагать свои DLL, при необходимости регестрировать их в ОС

 

вот нашел эту ветку,в которой говорится о каких-то возможностях инсталляции самим терминалом. это реализовано?

https://www.mql5.com/ru/forum/13113/page3

Инсталлятор для MQL5 проектов
Инсталлятор для MQL5 проектов
  • 2013.07.28
  • revers45
  • www.mql5.com
Из MQL5 узнать путь можно через:TerminalInfoString(TERMINAL_DATA_PATH)Для инсталлятора нужно знать этот путь извне, желательно не запуская терминал.
 
Petr Vorob'ev #:

вот нашел эту ветку,в которой говорится о каких-то возможностях инсталляции самим терминалом. это реализовано?

https://www.mql5.com/ru/forum/13113/page3

Последнему посту этой ветки более 11 лет.

 
Grigori.S.B #:

Последнему посту этой ветки более 11 лет.

да, и в ней говорится разработчиками " Эту идею с конфиг файлом мы давно разработали, но не внедрили. Сейчас как раз пришло время это сделать. 
Т.е. время пришло, но не наступило?

 
Petr Vorob'ev #:

да, и в ней говорится разработчиками " Эту идею с конфиг файлом мы давно разработали, но не внедрили. Сейчас как раз пришло время это сделать. 
Т.е. время пришло, но не наступило?

Таких примеров очень много.

 
есть ли определенные ветки реестра в которых хранятся пути к  терминалу [TERMINAL_PATH, TERMINAL_DATA_PATH, TERMINAL_COMMONDATA_PATH] ?
 
Petr Vorob'ev #:
есть ли определенные ветки реестра в которых хранятся пути к  терминалу [TERMINAL_PATH, TERMINAL_DATA_PATH, TERMINAL_COMMONDATA_PATH] ?

я когда-то давно делал подобное через %APPDATA% не трогая реестр

CommonFiles это %APPDATA%/MetaQuotes/Terminal/Common

на каталоги DataFiles отдельных инстанцов есть указания в %APPDATA%/MetaQuotes/Terminal/*/origin.txt

 
Maxim Kuznetsov #:

я когда-то давно делал подобное через %APPDATA% не трогая реестр

CommonFiles это %APPDATA%/MetaQuotes/Terminal/Common

на каталоги DataFiles отдельных инстанцов есть указания в %APPDATA%/MetaQuotes/Terminal/*/origin.txt

Максим, спасибо. С этим уже можно работать.

А как быть с терминалами, которые используют папку MQL5 в Program Files (допустим при выключенном UAC)?

 
Petr Vorob'ev #:

Максим, спасибо. С этим уже можно работать.

А как быть с терминалами, которые используют папку MQL5 в Program Files (допустим при выключенном UAC)?

в чужие каталоги никогда ничего не клал. 

мой инсталлятор https://sourceforge.net/projects/mt-atcl/ для своих DLL и компонентов делает свои каталоги. А для отдельных терминалов раскладывает только через их %APPDATA%

 
Grigori.S.B #:

Таких примеров очень много.

Для начала, надо отказаться от установки терминалов по умолчанию, это для тупых американских домохозяек. Надо перевести запуск в режим portable/ Например, сейчас мой теминал для разработки запускается так:

E:\Forex\School\MT5_Develop3\Terminal64.cmd, где cmd содержит 1 строку:

start terminal64.exe /portable  

Для отдельного запуска редактора 

start metaeditor64.exe /portable

И нет больше необходимости ползать по убийственно длинным и непонятным путям типа C:\Users\mylogin\AppData\Roaming\MetaQuotes\Terminal\0A7B27E933034692744E19C135DAF7B5 

Все вопросы копирования решаются за 30 сек. руками через TotalCommander. Или, если массово, через .cmd файлик.

Maxim Kuznetsov #:

я когда-то давно делал подобное через %APPDATA% не трогая реестр

CommonFiles это %APPDATA%/MetaQuotes/Terminal/Common

на каталоги DataFiles отдельных инстанцов есть указания в %APPDATA%/MetaQuotes/Terminal/*/origin.txt

Про этот подход Грибоедов написал трагедию Горе от ума. Да, я недавно консультировал одного MQL5 программиста и с болью в сердце видел, что чувак пользуется Проводником!!! Который также для тупых американских домохозяек ))