¿Hay alguna manera en Ruby de encontrar la versión de un archivo, específicamente un archivo .dll?Comprobando la versión del archivo en Ruby en Windows
Respuesta
Para cualquier archivo, necesitaría descubrir en qué formato está el archivo, y luego abrir el archivo y leer los bytes necesarios para averiguar de qué versión es el archivo. No hay API o método común para determinar una versión de archivo en Ruby.
Tenga en cuenta que sería más fácil si la versión del archivo estuviera en el nombre del archivo.
Si está trabajando en la plataforma de Microsoft, debería poder usar la API de Win32 en Ruby para llamar a GetFileVersionInfo(), que le devolverá la información que está buscando. http://msdn.microsoft.com/en-us/library/ms647003.aspx
Para Windows EXE y 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
El 'descomprimir' + parte de expresiones regulares es un truco, la forma "correcta" es la API VerQueryValue, pero esto debería funcionar para la mayoría de los archivos. (Probablemente falla miserablemente en juegos de caracteres extendidos.)
¿Qué sucede si desea obtener la información de la versión con ruby, pero el código ruby no se está ejecutando en Windows?
El siguiente no sólo que (hacer caso a la misma advertencia charset extendida):
#!/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
Como de Rubí 2.0, el módulo DL
está en desuso. Aquí hay una versión actualizada de la respuesta de AShelly, usando Fiddle:
version_dll = Fiddle.dlopen('version.dll')
s=''
vsize = Fiddle::Function.new(version_dll['GetFileVersionInfoSize'],
[Fiddle::TYPE_VOIDP, Fiddle::TYPE_VOIDP],
Fiddle::TYPE_LONG).call(filename, s)
raise 'Unable to determine the version number' unless vsize > 0
result = ' '*vsize
Fiddle::Function.new(version_dll['GetFileVersionInfo'],
[Fiddle::TYPE_VOIDP, Fiddle::TYPE_LONG,
Fiddle::TYPE_LONG, Fiddle::TYPE_VOIDP],
Fiddle::TYPE_VOIDP).call(filename, 0, vsize, result)
rstring = result.unpack('v*').map{|s| s.chr if s<256}*''
r = /FileVersion..(.*?)\000/.match(rstring)
puts r[1]
- 1. Obtener la versión del archivo en PowerShell
- 2. Comprobando los permisos del propietario del archivo
- 3. Versión del archivo vs. Versión del producto
- 4. instalar una versión específica de Ruby on Rails en Windows
- 5. Comprobar la versión del instalador de Windows
- 6. Comprobando la existencia del miembro en Python
- 7. ¿Cómo obtengo la hora de creación del archivo en Ruby en Windows?
- 8. Heroku, ¿Cómo saber la versión ruby del proyecto?
- 9. Ruby: Comprobando el ancho del este de Asia (Unicode)
- 10. Eliminando la versión del archivo xml
- 11. nombres de archivo Unicode en Windows en Ruby
- 12. ¿Cómo recupero la versión de un archivo de un archivo por lotes en Windows Vista?
- 13. Ruta del archivo canónico en Ruby
- 14. Comprobando que existe un archivo en C
- 15. Comprobando cuándo se modificó por última vez un archivo en C# en Windows OS
- 16. ¿La versión del archivo de ensamblaje no cambia?
- 17. Cambiar el propietario del archivo en Windows
- 18. versión de Windows del frontend GDB DDD
- 19. ¿Cómo especificar la codificación del archivo de salida en Ruby?
- 20. Eliminar versiones anteriores de Ruby (en Windows)
- 21. Cliente Comprobando el tamaño del archivo usando HTML5?
- 22. comprobando eof en cadena :: getline
- 23. Comprobando la longitud del objeto de diccionario
- 24. Determine la versión de ruby desde Rails
- 25. Comprobando el nombre de la versión de la aplicación externa en android
- 26. Comprobando si el archivo es de 32 bits o de 64 bits: en Windows
- 27. ¿Cómo obtener la versión de la aplicación en Windows Phone?
- 28. Ruby versión para producción
- 29. Comprobando la sintaxis del enlace de la entrada del usuario
- 30. ¿Cómo configuras la versión de Java en Windows git bash?