当前位置: 首页 > 面试题库 >

获取.exe的版本信息

严高峻
2023-03-14
问题内容

有谁知道如何通过Java获取可执行文件/文件的版本信息。场景是我的本地系统上有一个文件,如果服务器上的版本较新,则我的系统上需要从服务器上下载文件。


问题答案:

在花了几个小时上网并编码之后,我找到了使用JNA来获取文件的版本信息的解决方案。

import com.sun.jna.Library;
import com.sun.jna.Memory;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.PointerByReference;
import com.sun.jna.win32.W32APIOptions;
import java.io.IOException;


public class FileVersionInfo
{
    interface Version extends Library {

        Version INSTANCE = (Version) Native.loadLibrary("Version", Version.class, W32APIOptions.UNICODE_OPTIONS);

        public int GetFileVersionInfoSizeW(String lptstrFilename, int dwDummy);

        public boolean GetFileVersionInfoW(String lptstrFilename, int dwHandle,
            int dwLen, Pointer lpData);

        public int VerQueryValueW(Pointer pBlock, String lpSubBlock,
            PointerByReference lplpBuffer, IntByReference puLen);

    }

    static class VS_FIXEDFILEINFO extends com.sun.jna.Structure {
        public int dwSignature;
        public int dwStrucVersion;
        public int dwFileVersionMS;
        public int dwFileVersionLS;
        public int dwProductVersionMS;
        public int dwProductVersionLS;
        public int dwFileFlagsMask;
        public int dwFileFlags;
        public int dwFileOS;
        public int dwFileType;
        public int dwFileSubtype;
        public int dwFileDateMS;
        public int dwFileDateLS;

           public VS_FIXEDFILEINFO(com.sun.jna.Pointer p){
                super(p);
           }
    }
    public static void main(String[] args) throws IOException {

        int dwDummy = 0;
        int versionlength = Version.INSTANCE.GetFileVersionInfoSizeW(
                "C:\\Test\\chromeinstall.exe", dwDummy);

        byte[] bufferarray = new byte[versionlength];
        Pointer lpData = new Memory(bufferarray.length);

        PointerByReference lplpBuffer = new PointerByReference();
        IntByReference puLen = new IntByReference();
        boolean FileInfoResult = Version.INSTANCE.GetFileVersionInfoW(
                "C:\\Test\\chromeinstall.exe",
                0, versionlength, lpData);
        System.out.println(FileInfoResult);
        int verQueryVal = Version.INSTANCE.VerQueryValueW(lpData,
                "\\", lplpBuffer,
                puLen);

        VS_FIXEDFILEINFO lplpBufStructure = new VS_FIXEDFILEINFO(
                lplpBuffer.getValue());
        lplpBufStructure.read();

        short[] rtnData = new short[4];
        rtnData[0] = (short) (lplpBufStructure.dwFileVersionMS >> 16);
        rtnData[1] = (short) (lplpBufStructure.dwFileVersionMS & 0xffff);
        rtnData[2] = (short) (lplpBufStructure.dwFileVersionLS >> 16);
        rtnData[3] = (short) (lplpBufStructure.dwFileVersionLS & 0xffff);

        for (int i = 0; i < rtnData.length; i++) {
            System.out.println(rtnData[i]);
        }

}


 类似资料:
  • 本文向大家介绍Python获取DLL和EXE文件版本号的方法,包括了Python获取DLL和EXE文件版本号的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python获取DLL和EXE文件版本号的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Python程序设计有所帮助。

  • 本文向大家介绍Python脚本获取操作系统版本信息,包括了Python脚本获取操作系统版本信息的使用技巧和注意事项,需要的朋友参考一下 查看系统版本信息是一件家常便饭的事情,有时候需要将版本信息录入到资产管理系统中,如果每次手动的去查询这些信息再录入系统那么是一件令人呢头疼的事情,如果采用脚本去完成这件事情,那么情况就有所不同了。 在Python的世界里,获取Windows版本信息和Linux的版

  • 本文向大家介绍Android SdkVersion的区别及获取版本信息方法,包括了Android SdkVersion的区别及获取版本信息方法的使用技巧和注意事项,需要的朋友参考一下 1、minSdkVersion,targetSdkVersion,maxSdkVersion,compileSdkVersion四个数值之间有什么区别? • minSdkVersion,maxSdkVersion是项

  • 本文向大家介绍Android获取手机的版本号等信息的代码,包括了Android获取手机的版本号等信息的代码的使用技巧和注意事项,需要的朋友参考一下 本文实例分享了Android获取手机系统版本等信息的方法,供大家参考,具体内容如下: 第一种代码: 第二种代码: 第三种代码:获得手机型号,系统版本,App版本号等信息,具体代码: MainActivity如下: main.xml如下: 最后一段代码:

  • 通过sdk.js文件内容查看版本 sdk.js中的文件头部含有该文件的信息,其中v{1.2.1}中的1.2.1为当前文件的版本。 /*! * sdk.js v1.2.1 * 2017-10-26 15:13:33 * (c) 2017 mudu.tv * 杭州雅顾科技有限公司 版权所有 * */ 通过接口获取 // 返回string, 如: 1.2.1 var version =

  • /** 获取SDK版本号 @return 版本号 */ NSString *version = [Ntalker ntalker_versionNumber];