import fsys; import process.evb; namespace process.evb; class project{ ctor(){ this.mapExecutableWithTemporaryFile = true;//使用临时文件映射可执行文件 this.allowRunningOfVirtualExeFiles = true;//将虚拟系统共享到子进程 this.processesOfAnyPlatforms = true;//允许包含并运行 64 位 EXE。 this.files = {}; }; addSubFile = function(srcPath,dstName,wildcard,proc,enumSubdir){ if(!dstName) dstName = "%DEFAULT FOLDER%"; if(!this.files[dstName]) this.files[dstName] = {} if( ..fsys.isDir(srcPath)){ ..table.push(this.files[dstName], this.dirToXml(srcPath,wildcard,proc,enumSubdir)); return true; } }; addFile = function(srcPath,dstName,wildcard,proc,enumSubdir){ if(!this.output){ error("请先指定 output 属性",2); } ..io.remove(this.output); if(!dstName) dstName = "%DEFAULT FOLDER%"; if(!this.files[dstName]) this.files[dstName] = {} if( ..fsys.isDir(srcPath)){ var xml = " 3 " + ..io.splitpath(srcPath).file + " 0 false false " +this.dirToXml(srcPath,wildcard,proc,enumSubdir)+ " " ..table.push(this.files[dstName], xml); return true; } if(..io.exist(srcPath)){ if(!this.main && ..string.endWith(srcPath,".exe",true)){ this.main = srcPath; } ..table.push(this.files[dstName], " 2 " +..io.splitpath(srcPath).file+ " " +srcPath+ " false false 0 false false false "); } return; }; dirToXml = function(srcPath,wildcard,proc,enumSubdir){ if(enumSubdir === null ) enumSubdir = true; var outXml = {}; ..fsys.enum( srcPath, wildcard, function(dirname,filename,fullpath,findData){ if(filename){ if(!this.main && ..string.endWith(filename,".exe",true)){ this.main = fullpath; } ..table.push(outXml, " 2 " +filename+ " " +fullpath+ " false false 0 false false false "); } }, function(dirpath,dirname){ if(enumSubdir) { ..table.push(outXml," 3 " +dirname+ " 0 false false " +this.dirToXml(dirpath,wildcard,proc,enumSubdir)+ " ") } return false; } ); return ..string.join(outXml); } generate = function(evbPath){ if(!this.main){ error("请先指定 main 属性",2); } this.main = ..io.fullpath(this.main); if(!this.output){ error("请先指定 output 属性",2); } this.output = ..io.fullpath(this.output); this.xmlFiles = {}; for(dirName,xmlFiles in this.files){ ..table.push(this.xmlFiles," "+(dirName[#dirName]==':'#?'1':'3')+" "+dirName+" 0 false false "+..string.join(xmlFiles)+" ") } this.xmlFiles = ..string.join(this.xmlFiles); var xmlData = ..string.loadcode($"~\lib\process\evb\project\#projectTemplate.aardio",this); ..string.save(evbPath,xmlData) }; } /**intellisense() process.evb.project = 用于自动创建 Enigma Virtual Box 独立 EXE 封包工程文件\n生成的独立 EXE 默认不会在运行时释放临时文件\n仅支持 32 位程序,现在知道 32 位程序香了吧! process.evb.project() = 创建 Enigma Virtual Box 独立 EXE 封包工程生成工具\n!processEvbProject. end intellisense**/ /**intellisense(!processEvbProject) addFile( = 添加文件或目录 addFile(.(srcPath,dstName,wildcard,proc,enumSubdir) = 添加文件或目录\n参数 @srcPath 指定要添加的文件或目录\n可选参数 @dstName 指定目标目录,默认为 "%DEFAULT FOLDER%"\n可选参数 @wildcard 在添加目录时指定通配符,默认为 "*.*"\n可选参数 @proc 在添加目录时指定文件回调函数,用法参考此函数源码\n可选参数 @enumSubdir 指定是否递归添加子目录,默认为 true addSubFile( = 添加目录下的文件,不添加目录自身 addSubFile(.(dirPath,dstName,wildcard,proc,enumSubdir) = 添加文件或目录\n参数 @dirPath 指定要添加下级文件的目录。\n可选参数 @dstName 指定目标目录,默认为 "%DEFAULT FOLDER%"\n可选参数 @wildcard 在添加目录时指定通配符,默认为 "*.*"\n可选参数 @proc 在添加目录时指定文件回调函数,用法参考此函数源码\n可选参数 @enumSubdir 指定是否递归添加子目录,默认为 true generate(.(evbPath) = 创建 Enigma Virtual Box 独立 EXE 封包工程文件\n@evbPath 参数指定输出路径\n\n注意输出文件使用 UTF-8 编码,\n在 Enigma Virtual Box 界面中加载时中文会乱码,\n但可以正常使用 process.evb 生成独立 EXE evbProject.main = 指定启动 EXE 文件路径 evbProject.output = 指定要生成的独立 EXE 文件路径 deleteExtractedOnExit = 是否在退出时删除释放的文件,\n如果没有文件设置为释放就不用管 compressFiles = 压缩文件,没必要设置 processesOfAnyPlatforms = 允许32 位封包程序包含并运行 64 位 程序。 mapExecutableWithTemporaryFile = 使用临时文件映射可执行文件。\n程序会自动清除这些临时文件,而且临时文件不包含任何实际内容 allowRunningOfVirtualExeFiles = 允许运行虚拟可执行文件\nmapExecutableWithTemporaryFile 为 true 时有效\n一般没必要设置 shareVirtualSystem = 将虚拟系统共享到所有子进程(即使子进程不是封包内程序)。\nmapExecutableWithTemporaryFile 为 true 时有效\n一般没必要设置 main = 需要封包的启动 EXE 文件路径\n不指定则自动设为已添加文件中的第一个 EXE 文件 output = 生成的独立 EXE 文件 end intellisense**/