//独立 EXE import win.ui; /*DSG{{*/ var winform = win.form(text="转换为独立 EXE 文件(基于虚拟化技术,不需要释放临时文件)";right=754;bottom=452;border="dialog frame";max=false) winform.add( button={cls="button";text="转换为独立 EXE";left=462;top=386;right=702;bottom=440;color=14120960;db=1;dr=1;font=LOGFONT(h=-14);note="点这里将勾选文件嵌入到独立 EXE";z=2}; checklist={cls="checklist";left=15;top=34;right=738;bottom=382;db=1;dl=1;dr=1;dt=1;edge=1;hscroll=1;items={};vscroll=1;z=1}; edit={cls="edit";left=15;top=34;right=738;bottom=382;edge=1;hide=1;multiline=1;z=3}; lbOutputDir={cls="static";left=17;top=7;right=310;bottom=25;transparent=1;z=5}; static2={cls="static";text="请勾选没有内嵌到 EXE 资源的的发布输出文件与目录。 适用于将 Python 等不能嵌入 EXE 资源的的外部组件封包到独立 EXE 文件。 可打包 32/64 位外部 EXE。";left=16;top=391;right=452;bottom=448;transparent=1;z=4} ) /*}}*/ import ide; if(!io.exist(ide.getPublishPath())){ error("请先打开 aardio 工程并生成 EXE 文件!",2) } import fsys; var files,dirs = fsys.list(ide.getPublisDir()); for(i=1;#dirs;1){ var hItem = winform.checklist.addItem(dirs[i]); if((dirs[i]=="lib") || (dirs[i]=="java") || (dirs[i]=="py") ){ winform.checklist.setChecked(hItem,true) } } for(i=1;#files;1){ var hItem = winform.checklist.addItem(files[i]); if(string.endsWith(files[i],".exe",true) || string.endsWith(files[i],".dll",true)){ winform.checklist.setChecked(hItem,true) } } import fsys; import process.evb; import process.evb.project; import raw.pefile; winform.button.oncommand = function(id,event){ var files = winform.checklist.checked; if(#files<=1){ winform.msgboxErr("至少需要勾选 2 个文件"); return; } var evbProject = process.evb.project() evbProject.main = ide.getPublishPath(); evbProject.output = ide.getPublishPath() + ".evb.dat"; var pefiles = raw.pefile(evbProject.main); if(pefiles){ pefiles.close(); if( pefiles.getSectionByName(".enigma1") ){ winform.msgboxErr("已经转换为独立 EXE,请勿重复转换。"); return; } } for(i,idx in files){ var name = winform.checklist.getItemText(idx); evbProject.addFile(io.joinpath(ide.getPublisDir(),name)); } evbProject.generate("/app.evb"); import process.evb; var evb = process.evb("/app.evb"); evb.logger = winform.edit; winform.button.disabledText = {"✶";"✸";"✹";"✺";"✹";"✷"} winform.edit.hide = false; winform.checklist.hide = true; evb.logResponse(); io.remove("/app.evb"); fsys.move(evbProject.output,ide.getPublishPath()); winform.edit.print("已完成"); winform.setTimeout( function(){ winform.edit.hide = true; winform.checklist.hide = false; winform.button.disabledText = null; process.exploreSelect(ide.getPublishPath()); winform.close(); },2000 ); } winform.lbOutputDir.ellipsis = "path"; winform.lbOutputDir.text = ide.getPublisDir(); winform.show(); win.loopMessage();