java获取exe⽂件的版本信息
牛字1package util;
2
3import java.io.File;
4import java.io.FileNotFoundException;
5import java.io.IOException;
6import java.io.RandomAccessFile;
7
8
9public class ExeDllFileVersion {
10
11 public static int unpack(byte[] b) {
12 int num = 0;
晚安英文翻译
13 for (int i = 0; i < b.length; i++) {
14 num = 256 * num + (b[b.length - 1 - i] & 0xff);
15 }
16 return num;
17 }
18 public static String getExeVersion(File file) {
19
20 String version = null;
21 RandomAccessFile raf = null;
22 byte[] buffer;
23 String str;
24 try {
25 raf = new RandomAccessFile(file, "r");
26 buffer = new byte[64];
27 ad(buffer);
28 str = "" + (char)buffer[0] + (char)buffer[1];
29 if(!"MZ".equals(str)) {
电脑怎样卸载软件30 return version;
31 }
32
33 int peOfft = unpack(new byte[]{buffer[60], buffer[61], buffer[62], buffer[63]});
34 if(peOfft < 64) {
35 return version;
36 }
37
38 raf.ek(peOfft);
39 buffer = new byte[24];
40 ad(buffer);
41 str = "" + (char)buffer[0] + (char)buffer[1];
42 if(!"PE".equals(str)) {
43 return version;
44 }
45 int machine = unpack(new byte[]{buffer[4], buffer[5]});
46 if(machine != 332) {
47 return version;
48 }
49
50 int noSections = unpack(new byte[]{buffer[6], buffer[7]});
51 int optHdrSize = unpack(new byte[]{buffer[20], buffer[21]});
对公司的寄语52 raf.FilePointer() + optHdrSize);
53 boolean resFound = fal;
54 for(int i=0; i < noSections; i++) {
55 buffer = new byte[40];
56 ad(buffer);
57 str = "" + (char)buffer[0] + (char)buffer[1] +
58 (char)buffer[2] + (char)buffer[3] + (char)buffer[4];
59 if(".rsrc".equals(str)) {
60 resFound = true;
61 break;
62 }
62 }
自己的优点
63 }
64 if(!resFound) {
65 return version;
66 }
67
68 int infoVirt = unpack(new byte[]{buffer[12], buffer[13], buffer[14], buffer[15]});
69 int infoSize = unpack(new byte[]{buffer[16], buffer[17], buffer[18], buffer[19]});
新生儿体温多少度正常范围70 int infoOff = unpack(new byte[]{buffer[20], buffer[21], buffer[22], buffer[23]});
71 raf.ek(infoOff);
72 buffer = new byte[infoSize];
73 ad(buffer);
74 int nameEntries = unpack(new byte[]{buffer[12], buffer[13]});
75 int idEntries = unpack(new byte[]{buffer[14], buffer[15]});
76 boolean infoFound = fal;
77 int subOff = 0;
78 for(int i=0; i < (nameEntries+idEntries); i++) {
79 int type = unpack(new byte[]{buffer[i*8+16], buffer[i*8+17], buffer[i*8+18], buffer[i*8+19]});
80 if(type == 16) { //FILEINFO resource
81 infoFound = true;
82 subOff = unpack(new byte[]{buffer[i*8+20], buffer[i*8+21], buffer[i*8+22], buffer[i*8+23]});
83 break;
84 }
85 }
86 if(!infoFound) {
87 return version;
88 }
89
90 subOff = subOff&0x7fffffff;
91 infoOff = unpack(new byte[]{buffer[subOff+20], buffer[subOff+21], buffer[subOff+22], buffer[subOff+23]}); //offt of first FILEINFO
92 infoOff = infoOff&0x7fffffff;
93 infoOff = unpack(new byte[]{buffer[infoOff+20], buffer[infoOff+21], buffer[infoOff+22], buffer[infoOff+23]}); //offt to data
94 int dataOff = unpack(new byte[]{buffer[infoOff], buffer[infoOff+1], buffer[infoOff+2], buffer[infoOff+3]});
95 dataOff = dataOff - infoVirt;
96
97 int version1 = unpack(new byte[]{buffer[dataOff+48], buffer[dataOff+48+1]});
98 int version2 = unpack(new byte[]{buffer[dataOff+48+2], buffer[dataOff+48+3]});
99 int version3 = unpack(new byte[]{buffer[dataOff+48+4], buffer[dataOff+48+5]});
100 int version4 = unpack(new byte[]{buffer[dataOff+48+6], buffer[dataOff+48+7]});
101
102 version=version2 + "." + version1 + "." + version4 + "." + version3;
103 return version;
104
三的倍数有哪些105 } catch (FileNotFoundException e) {
106 return "获取版本信息失败:"+version+" 原因:"+e;
107 } catch (IOException e) {
108 return "获取版本信息失败:"+version+" 原因:"+e;
109 } finally {
110 if(raf != null) {
111 try {
112 raf.clo();
113 } catch (IOException e) {
114 }
115 }
116 }
117
118
电子协议119 }
120}