Safe version of RunShell()

This forum is for eXpress++ general support.
Post Reply
Message
Author
User avatar
Eugene Lutsenko
Posts: 1649
Joined: Sat Feb 04, 2012 2:23 am
Location: Russia, Southern federal district, city of Krasnodar
Contact:

Safe version of RunShell()

#1 Post 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]

Post Reply