java获取exe文件的版本信息

更新时间:2023-07-19 04:46:53 阅读: 评论:0

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}

本文发布于:2023-07-19 04:46:53,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1087295.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:软件   范围   获取   寄语   电子   电脑
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图