当前位置:  开发笔记 > 后端 > 正文

在Windows上检查Ruby中的文件版本

如何解决《在Windows上检查Ruby中的文件版本》经验,为你挑选了2个好方法。

Ruby中有没有办法找到文件的版本,特别是.dll文件?



1> AShelly..:

对于Windows EXE和DLL:

require "Win32API"
FILENAME = "c:/ruby/bin/ruby.exe" #your filename here
s=""
vsize=Win32API.new('version.dll', 'GetFileVersionInfoSize', 
                   ['P', 'P'], 'L').call(FILENAME, s)
p vsize
if (vsize > 0)
  result = ' '*vsize
  Win32API.new('version.dll', 'GetFileVersionInfo', 
               ['P', 'L', 'L', 'P'], 'L').call(FILENAME, 0, vsize, result)
  rstring = result.unpack('v*').map{|s| s.chr if s<256}*''
  r = /FileVersion..(.*?)\000/.match(rstring)
  puts "FileVersion = #{r ? r[1] : '??' }"
else
  puts "No Version Info"
end

'unpack'+ regexp部分是一个hack,"正确"的方式是VerQueryValue API,但这适用于大多数文件.(可能在扩展字符集上失败了.)



2> 小智..:

如果你想用ruby获取版本信息怎么办,但ruby代码没有在Windows上运行?

以下就是这样(注意相同的扩展charset警告):

#!/usr/bin/ruby

s = File.read(ARGV[0])
x = s.match(/F\0i\0l\0e\0V\0e\0r\0s\0i\0o\0n\0*(.*?)\0\0\0/)

if x.class == MatchData
  ver=x[1].gsub(/\0/,"")
else
  ver="No version"
end

puts ver

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有