7z有一个神奇的特性,
就是你可以把压缩包追加在EXE文件后面,然后他依然可以正常的解压。
曾经用这个代码写过很多其他软件的安装包,有用plus控件做的,也有htmlayout做的,
如果一个程序本身是用HTMLayout做的,还可以在自解压程序中直接调用EXE中已经有的HTMLayout组件。
这样做出来的界面非常漂亮,而且文件也很小,大家可以试试,比NSIS什么的强悍多了。
示例源码下载:
7z自解压完整源码.7z
(127.95 KB, 下载次数: 1913)
解压程序非常简单简单,主要代码如下:import win.ui;
/*DSG{{*/
var winform = win.form(text="7z自解压演示";right=670;bottom=300;image=$"\res\bg.jpg";max=false;min=false;parent=...)
winform.add(
pie={cls="plus";text="100%";left=39;top=22;right=323;bottom=284;background="\res\pie-bg.png";clipBk=false;color=16777215;font=LOGFONT(h=-24);foreRepeat="center";foreground="\res\pie.png";repeat="center";z=1}
)
/*}}*/
//设置扇形进度条范围
winform.pie.setPieRange(1,100);
winform.show();
import sevenZip.decoder2;
var archive = sevenZip.decoder2();
archive.open( io._exepath )
//设置解压进度
archive.extractSetCompleted = function(lowSize,hiSize,percent){
winform.pie.text = percent + "%";
winform.pie.progressPercentage = percent;
win.peekPumpInputMessage();
}
archive.extract( "/")
win.loopMessage();
然后我们可以在工程下面的 \.build\工程名字.main.aardio 这个文件中添加一个触发器, 在发布EXE完成以后,立即自动添加文件并压缩EXE文件,触发器里的代码如下: import ide;
import ide.upx;
ide.upx.compress( ide.getPublishPath() ); //首先调用upx压缩EXE
import console
import fsys.dlg;
import sevenZip.cmd;
sevenZip.cmd.compress(
fsys.dlg.opendir(,,"请选择要压缩到EXE中的目录")
, ide.getPublishPath() , console.log
)
console.log("压缩完成")
;
因为7z压缩的代码只是在开发环境里才需要执行,所以我们直接调用7z的命令行来压缩文件。
曾经用这个方法写过很多的安装程序,大家可以试试。
|