class U3d::WindowsInstallationHelper
Public Class Methods
new(exe_path)
click to toggle source
# File lib/u3d/installation.rb, line 325 def initialize(exe_path) @exe_path = exe_path end
Public Instance Methods
build_number()
click to toggle source
# File lib/u3d/installation.rb, line 338 def build_number s = unity_version_info if s a = s.split("_") return a[1] if a.count > 1 end nil end
version()
click to toggle source
# File lib/u3d/installation.rb, line 329 def version s = unity_version_info if s a = s.split("_") return a[0] unless a.empty? end nil end
Private Instance Methods
string_file_info(info, path)
click to toggle source
# File lib/u3d/installation.rb, line 353 def string_file_info(info, path) require "Win32API" get_file_version_info_size = Win32API.new('version.dll', 'GetFileVersionInfoSize', 'PP', 'L') get_file_version_info = Win32API.new('version.dll', 'GetFileVersionInfo', 'PIIP', 'I') ver_query_value = Win32API.new('version.dll', 'VerQueryValue', 'PPPP', 'I') rtl_move_memory = Win32API.new('kernel32.dll', 'RtlMoveMemory', 'PLL', 'I') file = path.tr("/", "\\") buf = [0].pack('L') version_size = get_file_version_info_size.call(file + "\0", buf) raise Exception if version_size.zero? # TODO: use GetLastError version_info = 0.chr * version_size version_ok = get_file_version_info.call(file, 0, version_size, version_info) raise Exception if version_ok.zero? # TODO: use GetLastError # hardcoding lang codepage struct_path = "\\StringFileInfo\\040904b0\\#{info}" addr = [0].pack('L') size = [0].pack('L') query_ok = ver_query_value.call(version_info, struct_path + "\0", addr, size) raise Exception if query_ok.zero? raddr = addr.unpack('L')[0] rsize = size.unpack('L')[0] info = Array.new(rsize, 0).pack('L*') rtl_move_memory.call(info, raddr, info.length) info.strip rescue StandardError => e UI.verbose("Failure to find '#{info}' under '#{path}': #{e}") UI.verbose(e.backtrace) nil end
unity_version_info()
click to toggle source
# File lib/u3d/installation.rb, line 349 def unity_version_info @uvf ||= string_file_info('Unity Version', @exe_path) end