とりあえず、Ruby で .NET Framework のバージョンを調べてみた
Windows 使ってると、.NET Framework のバージョンが気になるよね。
そこで、Ruby で .NET Framework のバージョンを確かめるスクリプトを書いてみたよ!みたよ!
実はね、.NET Frameworkのバージョンを確認する方法 [atmarkit.co.jp] っていう記事を覧て書いてみようと思ったんだー。
ばっちふぁいるでもできるなら、Ruby でもできるのはとーぜん!!*1
まずはこれ:
unless RUBY_PLATFORM =~ /mswin(?!ce)|mingw|cygwin|bccwin/ then $stderr.puts "お使いの OS は Windows ではありませんでした。" exit end
とりあえず、RUBY_PLATFORM [hatena.ne.jp] を使って ruby が走ってるプラットフォームを調べるよー。
次は、win/registory をあれするよー。
require 'win32/registry'
どうして調べてからあれするのかっていうと、Windows じゃないのにあれできるのかなーってちょっと不安だったんだよね。
次は、レジストリのパスの定数を設定するよー。
DOT_NET_FRAMEWORK1_0 = 'SOFTWARE\Microsoft\NET Framework Setup\Full\v1.0.3705\1041\Microsoft .NET Framework Full v1.0.3705 (1041)' DOT_NET_FRAMEWORK1_0_PATCH_LEVEL = 'SOFTWARE\Microsoft\Active Setup\Installed Components\{78705f0d-e8db-4b2d-8193-982bdda15ecd}' DOT_NET_FRAMEWORK = 'SOFTWARE\Microsoft\NET Framework Setup\NDP' DOT_NET_FRAMEWORK1_1 = DOT_NET_FRAMEWORK + '\v1.1.4322' DOT_NET_FRAMEWORK2_0 = DOT_NET_FRAMEWORK + '\v2.0.50727' DOT_NET_FRAMEWORK3_0 = DOT_NET_FRAMEWORK + '\v3.0' DOT_NET_FRAMEWORK3_5 = DOT_NET_FRAMEWORK + '\v3.5' DOT_NET_FRAMEWORK4_0 = 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client'
まあ、みればわかるよね。
ということで、.NET Framework 1.0 がインストールされているかを調べてみるよー。
begin Win32::Registry::HKEY_LOCAL_MACHINE.open( DOT_NET_FRAMEWORK1_0 ) do |section| installed = section['Install'].to_i puts ".NET Framework 1.0" if installed == 1 end Win32::Registry::HKEY_LOCAL_MACHINE.open( DOT_NET_FRAMEWORK1_0_PATCH_LEVEL ) do |section| value = section['Version'].split( /,/ ).pop.to_i puts ".NET Framework 1.0 Service Pack #{value}" if value != 0 end rescue # nothing end
1.0 だけちょっと特殊なんだよねー。
でも、1.1 から 3.5 まではおんなじ様な方法で調べられるよー。
framework_versions = [ ".NET Framework 1.1", ".NET Framework 2.0", ".NET Framework 3.0", ".NET Framework 3.5" ] [ DOT_NET_FRAMEWORK1_1, DOT_NET_FRAMEWORK2_0, DOT_NET_FRAMEWORK3_0, DOT_NET_FRAMEWORK3_5].each_with_index do |path, i| framework_version = framework_versions[i] begin Win32::Registry::HKEY_LOCAL_MACHINE.open( path ) do |section| installed = section['Install'].to_i service_pack = section['SP'].to_i if installed == 1 then puts framework_version puts "#{framework_version} Service Pack #{service_pack}" if service_pack > 0 end end Win32::Registry::HKEY_LOCAL_MACHINE.open( path + '\1041' ) do |section| installed = section['Install'].to_i service_pack = section['SP'].to_i if service_pack == 0 then puts "#{framework_version} 日本語 Language Pack" else puts "#{framework_version} 日本語 Language Pack #{service_pack}" end end rescue # nothing end end
SP が 0 なら Security Pack をインストールしてなくてー、1 以上はそのまま Security Pack のバージョン?になってるってすんぽー。
次は 4 いってみるよー。
begin Win32::Registry::HKEY_LOCAL_MACHINE.open( DOT_NET_FRAMEWORK4_0 ) do |section| installed = section['Install'].to_i puts ".NET Framework 4.0" if installed == 1 end rescue # nothing end
今現在、4 の SP は出てない気がするので、SP はないよー。
ということでフェーズごとに簡単な解説したけど、完全版はここ [github.com]ー。
*1:言語には個人差があります