Page 1 of 1

Safe version of RunShell()

Posted: Sun Nov 18, 2018 9:20 pm
by Eugene Lutsenko
This is to make it impossible to run an external exe module that has been replaced or corrupted by viruses.

If an executable module exists and its checksum matches, run it for execution:

Code: Select all

************************************************************************************************************
******** Если исполнимый модуль существует и его контрольная сумма совпадает, то запустить его на исполнение
************************************************************************************************************
FUNCTION LC_RunShell(cFile, mCheckSum)

Running(.T.)
CLoseAll()            // Закрытие всех баз данных с ожиданием завершения операций

  DIRCHANGE(Disk_dir)                                  // Перейти в папку с исполнимым модулем системы Эйдос

* ********** Формирование текстового файла с параметрами запуска модуля ************************
* set device to printer;set printer on;set printer to ("ImageResize.txt");set console off
* ??M_PathAppl+"\SWOTDiagrCls\"+cFileName+' '+ALLTRIM(STR(nWidth))+' '+ALLTRIM(STR(nHeight-29))  // <<<===#################
* Set device to screen;Set printer off;Set printer to;Set console on
* а можно просто сформировать и записать переменную StrFile(). Наверное так лучше 
************************************************************************************************

  IF FILE(cFile)
     IF FILECHECK(cFile) = mCheckSum
        RunShell("",cFile,.F.)                         // Чтобы процесс не бежал дальше, пока ImageResize.exe не закончится
     ELSE
        aMess := {}
        AADD(aMess, L('Исполнимый модуль: "')+cFile+'" '+L('заменен или поврежден, возможно вирусами.'))
        AADD(aMess, L('Поэтому он не может быть запущен на исполнение. Для получения этого модуля'))
        AADD(aMess, L('скачайте и установите новую версию системы "Эйдос" с сайта автора:'))
        AADD(aMess, L('- полная инсталляция (около 217 Мб): http://lc.kubagro.ru/Aidos-X.exe'))
        AADD(aMess, L('- только обновления  (около 8 Мб): http://lc.kubagro.ru/Downloads.exe'))
        AADD(aMess, L('Контрольная сумма=')+ALLTRIM(STR(FILECHECK(cFile),19)))                   // <<<===#################
        LB_Warning(aMess)
     ENDIF
  ELSE
     aMess := {}
     AADD(aMess, L('Исполнимый модуль: "')+cFile+'" '+L('в текущей папке системы "Эйдос" отсутствует.'))
     AADD(aMess, L('Для его получения скачайте и установите новую версию системы "Эйдос" с сайта автора:'))
     AADD(aMess, L('- полная инсталляция (около 217 Мб): http://lc.kubagro.ru/Aidos-X.exe'))
     AADD(aMess, L('- только обновления  (около 8 Мб): http://lc.kubagro.ru/Downloads.exe'))
     LB_Warning(aMess)
  ENDIF

CLoseAll()            // Закрытие всех баз данных с ожиданием завершения операций
Running(.F.)

RETURN nil
[/size]