exe怎么解压成文件(电脑上强力卸载的软件找回方法)
程序员文章站
2024-02-10 11:39:46
前有有讲过,如何通过java,将jar制作成自解压的exe文件。现收到需求:用户下载exe时,自动往exe文件中添加或覆盖某文件。思路:1、由于自解压的exe文件由sfx、config.txt、7z压...
前有有讲过,如何通过java,将jar制作成自解压的exe文件。现收到需求:用户下载exe时,自动往exe文件中添加或覆盖某文件。
思路:
1、由于自解压的exe文件由sfx、config.txt、7z压缩文件组成。所以直接用sevenzfile是打不开该文件的。
2、从exe文件中,找到config.txt结尾标识的位置(pos).
3、将exe文件拆会成两具临时文件件:sfx+config.txt文件,z7.7z压缩包文件。
4、调用sevenzfile,添加中覆盖文件组成新的压缩文件newz7.7z压缩包。
5、合并sfx+config.txt文件、newz7.7z压缩包成exe生解压文件。
代码如下:
其中:d:\test\7z自解压.exe 为自解压exe文件。
/**
* 查找文件中的config.txt结尾位置
*
* @throws ioexception
*/
@test
public void getconfigendpostest() throws ioexception {
final file exefile = new file("d:\test\7z自解压.exe");
final byte[] configend= ";!@installend@!".getbytes("iso-8859-1");
final bufferedinputstream exebis = new bufferedinputstream(new fileinputstream(exefile));
// sfx假定大于124928
exebis.skip(124928);
int b;
long pos = 124928;
int macth = 0;
while ((b = exebis.read()) != -1) {
pos++;
if (configend[macth] == b) {
macth++;
} else {
macth = 0;
}
if (macth == 15) {
system.out.print(pos);
break;
}
}
exebis.close();
}
/**
* 自解压文件拆分成: sfx+config, 7z两个临时文件
*
* @throws ioexception
*/
@test
public void splitfiletest() throws ioexception {
final file exefile = new file("d:\test\7z自解压.exe");
final fileinputstream exein = new fileinputstream(exefile);
final file sfxfile = new file("d:\test\sfx.tmp");
sfxfile.createnewfile();
final fileoutputstream sfxos = new fileoutputstream(sfxfile);
// 125070 第一步求得的pos
byte[] buffer = new byte[125070];
int length;
length = exein.read(buffer);
sfxos.write(buffer, 0, length);
sfxos.close();
final file z7file = new file("d:\test\z7.7z");
z7file.createnewfile();
final fileoutputstream z7os = new fileoutputstream(z7file);
while ((length = exein.read(buffer)) > 0) {
z7os.write(buffer, 0, length);
}
z7os.close();
exein.close();
}
/**
* 添加或覆盖的文件到7z
*
* @throws ioexception
*/
@test
public void writefileto7z() throws ioexception {
//略,7z文件处理
}
/**
* sfx+config + 新的7z文件成exe.
* @throws ioexception
*/
@test
public void mergefile() throws ioexception {
//略, 参考前一篇的《java jar制作可自运行的exe包》
}