Servizi. Sono già in funzione? - pagina 20

 
Алексей Тарабанов:
Il servizio opera con dati (citazioni) con possibilità di correggerli, ma non permette di gestire nulla, in particolare - le finestre del terminale, che è ciò di cui abbiamo bisogno. Da qui, l'ovvia conclusione: quando è necessario chiudere una finestra, il servizio genera un preventivo ovviamente impossibile per questa finestra e lo script collegato a questa finestra la chiude quando questo preventivo viene ricevuto.

In cima c'è un servizio completo che gestisce le finestre e Market Watch. Ma da qualche parte arrivano commenti come questo. Scrivere codice aiuta.

 
fxsaber:

In cima c'è un servizio completo che gestisce le finestre e Market Watch. Ma da qualche parte arrivano commenti come questo. Scrivere codice aiuta.

È completo, ma non funziona e non può funzionare.

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

E' a tutti gli effetti, ma non funziona e non può funzionare.

Rimosso il tuo divieto in ME, provalo.

 
fxsaber:

Rimosso il tuo divieto in ME, provalo.

Rottura?

 
E sto pensando. Mi piace pensare.
 
fxsaber:

Rimosso il tuo divieto in ME, provalo.

Se eri tu, grazie. Credo che sia stato Renat.

 
Ci sarà qualcosa sull'argomento?
 
Sarà possibile eseguire il servizio all'avvio del terminale o è già presente?
Eseguire più copie dello stesso servizio?
Passare dei parametri, o almeno uno per identificare ogni copia in esecuzione.
 
Ha scritto un servizio 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!");  
}


Quando si avvia il Terminale, appare subito un avviso se manca la cartella Tester.


Grande aiuto se il Tester su RAMDrive dovrebbe essere

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:

Quando si avvia il Terminale, appare subito un avviso se manca la cartella Tester.

Davvero molto utile.

Ho riavviato il computer e mi sono dimenticato di RAMDrive. Avvio MT5 e mi segnala immediatamente un problema.