lcZipName=THIS.zipname listfile=FULLPATH(".\zip.lst") STRTOFILE(THIS.FILES, listfile) lcbatFile=FULLPATH(FORCEEXT(SYS(2015),"bat")) logfile=FORCEEXT(lcbatFile,"log") THIS.logfile=logfile lcPKZ=FULLPATH("pkzip25.exe") TEXT textmerge noshow to lcBat "<<lcPkz>>" -add=update -dire "<<lcZipName>>" @"<<listfile>>" >"<<logfile>>" ENDTEXT lcThere=FULLPATH(".") STRTOFILE(lcBat, lcbatFile) LOCAL oprocess AS api_apprun OF PROCESS.vcx oprocess=NEWOBJECT('api_apprun','process', '', lcbatFile, lcThere, 'HID') oprocess.LaunchAppAndWait() RELEASE oprocess ERASE (lcbatFile)And it's still blazingly fast. This.files is a list of files to zip, but it can just contain a (full path to a) single file. In some cases I also parse the log file, to check for errors.