Services. Sont-ils déjà opérationnels ? - page 20

 
Алексей Тарабанов:
Le service fonctionne avec des données (citations) avec possibilité de les corriger, mais ne permet pas de gérer quoi que ce soit, en particulier - les fenêtres du terminal, ce qui est ce dont nous avons besoin. D'où la conclusion évidente : lorsque la fermeture d'une fenêtre est nécessaire, le service génère un devis manifestement impossible pour cette fenêtre et le script attaché à cette fenêtre la ferme lorsque ce devis est reçu.

Au sommet se trouve un service à part entière qui gère les fenêtres et Market Watch. Mais c'est de quelque part que viennent les commentaires comme celui-ci. Écrire du code aide.

 
fxsaber:

Au sommet se trouve un service à part entière qui gère les fenêtres et Market Watch. Mais c'est de quelque part que viennent les commentaires comme celui-ci. Écrire du code aide.

C'est complet, mais ça ne fonctionne pas, et ça ne peut pas fonctionner.

 
Алексей Тарабанов:

C'est complet, mais ça ne fonctionne pas, et ça ne peut pas fonctionner.

J'ai levé votre interdiction dans ME, essayez-le.

 
fxsaber:

J'ai levé votre interdiction dans ME, essayez-le.

La rupture ?

 
Et je pense. J'aime penser.
 
fxsaber:

J'ai levé votre interdiction dans ME, essayez-le.

Si c'était vous, merci. Je pense que c'était Renat.

 
Y aura-t-il quelque chose à ce sujet ?
 
Sera-t-il possible de lancer le service au démarrage du terminal, ou est-il déjà présent ?
Exécuter plusieurs copies d'un même service ?
Passer des paramètres, ou au moins un pour identifier chaque copie en cours.
 
Rédaction d'un service utile
// Сервис проверяет наличие корректной папки Tester.
#property service

input string inFolderName = "Tester";

#include <WinAPI\fileapi.mqh>
#include <WinAPI\handleapi.mqh>

#define  GENERIC_WRITE                    0x40000000
#define  CREATE_ALWAYS                    2
#define  FILE_ATTRIBUTE_NORMAL            0x00000080
#define  FILE_FLAG_OVERLAPPED             0x40000000

bool FileIsInvalid_WinAPI( const string FileName )
{
  const HANDLE hFile = CreateFileW(FileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL);      
  const bool Res = (hFile != INVALID_HANDLE);
  
  if (Res)
  {
    CloseHandle(hFile);
    
    DeleteFileW(FileName);
  }
    
  return(Res);
}

void OnStart()
{
  const string FileName = TerminalInfoString(TERMINAL_PATH) + "\\" + inFolderName;

  if (!FileIsInvalid_WinAPI(FileName + "\\" + __FILE__))
    MessageBox(FileName + " is invalid!");  
}


Au démarrage du terminal, un avertissement apparaît immédiatement si le dossier Tester est manquant.


Une grande aide si le testeur sur RAMDrive devrait être

imdisk -a -o awe -s 3 G -m Z: -p "/fs:ntfs /q /y /v:MT5Tester"

mkdir z:\Tester
mklink /j Tester z:\Tester

mkdir cache
mklink /j z:\Tester\cache cache
 
fxsaber:

Lorsque vous démarrez le terminal, un avertissement apparaît immédiatement si le dossier Tester est manquant.

Très pratique en effet.

J'ai redémarré l'ordinateur et j'ai oublié le RAMDrive. Je lance MT5 et il signale immédiatement un problème.