Existe-t-il un moyen, dans Ruby, de trouver la version d'un fichier, en particulier un fichier .dll?Vérification de la version du fichier dans Ruby sous Windows
Répondre
Pour tout fichier, vous devez trouver le format du fichier, puis ouvrir le fichier et lire les octets nécessaires pour connaître la version du fichier. Il n'y a pas d'API ou de méthode commune pour déterminer une version de fichier dans Ruby.
Notez que ce serait plus facile si la version du fichier était dans le nom du fichier.
Si vous travaillez sur la plate-forme Microsoft, vous devriez pouvoir utiliser l'API Win32 dans Ruby pour appeler GetFileVersionInfo(), qui renverra les informations que vous recherchez. http://msdn.microsoft.com/en-us/library/ms647003.aspx
Pour Windows EXE et 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
Le 'déballer' + partie regexp est un hack, la façon "correcte" est l'API VerQueryValue, mais cela devrait fonctionner pour la plupart des fichiers. (échoue probablement misérablement sur les jeux de caractères étendus.)
Et si vous voulez obtenir les informations de version avec ruby, mais le code ruby ne fonctionne pas sur Windows?
Ce qui suit ne vient que (le même avertissement se soucier de jeu de caractères étendu):
#!/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
Comme Ruby de 2,0, le module DL
est obsolète. Voici une version mise à jour de la réponse de AShelly, en utilisant 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. Comment mettre à jour la version de Ruby dans Windows?
- 2. Vérification de la validité du numéro de version avec Perl
- 3. Désactiver la vérification du certificat SSL dans Ruby
- 4. Comment lire la version du fichier .exe windows?
- 5. Déverrouillage non intrusif du fichier sous Windows
- 6. Vérification du fichier est ouvert dans Delphi
- 7. Accélérer le démarrage du script Ruby sous Windows ou Cygwin
- 8. Ruby FTP extrêmement lent sous Windows XP
- 9. Numéro de version du fichier dans la source avec Vault
- 10. Vérification du verrouillage de fichier sans test
- 11. Problème de condition de lancement de WISE Windows Installer Editor - Vérification de la version
- 12. Vérification de l'email Ruby (RFC 2822)
- 13. Fusion sélective dans la sous-version
- 14. La version du fichier d'assemblage ne change pas?
- 15. Script Bash: obtention de la sous-liste du fichier
- 16. Comment détecter la version linguistique de Windows
- 17. Comment étendre l'enformation de l'applet de la version Windows
- 18. Comment supprimer la dernière ligne du fichier dans Ruby?
- 19. API Windows pour déterminer la version du Service Pack
- 20. Ruby combien de vérification d'erreur est approprié?
- 21. Comment mettre à jour les propriétés de la sous-version
- 22. Comment écrire des CGI Ruby sur Rails sous Windows
- 23. Personnalisation de l'impression dans un fichier sous Windows
- 24. Récupération du numéro de version d'un fichier source dans ClearCase
- 25. Vérification du chargement du fichier flash avec javascript
- 26. La taille du fichier de type d'entrée varie sous Linux/Windows
- 27. Est-ce que Windows Installer utilise la version d'assemblage ou la version de fichier pour mettre à jour les DLL?
- 28. Démarrage automatique d'un fichier de traitement par lots sous Windows
- 29. Installation de Starling sous Windows
- 30. Modification de la disposition du clavier sous Windows Mobile