mitchellh / virtualbox

[ABANDONED] Create and modify virtual machines in VirtualBox using pure ruby.
http://mitchellh.github.com/virtualbox/
MIT License
245 stars 45 forks source link

Versioned interface doesn't detect version on Windows #37

Open mitchellh opened 14 years ago

mitchellh commented 14 years ago

Title.

bdimcheff commented 14 years ago

Does this cause Vagrant to be unusable on Windows? It looks like Vagrant just exits when it can't find the proper Virtualbox version.

mitchellh commented 14 years ago

bdimcheff,

What version of Windows are you on and is it 64-bit?

Mitchell

mitchellh commented 14 years ago

I should make myself more clear. virtualbox gem uses the win32ole library to talk to VirtualBox on Windows. This library works great but does not work at all on 64-bit versions of Windows, and this is where the source of this issue typically comes from.

I'm planning on adding a check in Vagrant for 64-bit windows and showing a more descriptive error message.

bdimcheff commented 14 years ago

ahhhhh that would do it. It is 64-bit win7. There's no way to make it work on 64-bit at all? This is what I get from the stack trace, which is kinda strange since it looks like the first win32ole call succeeds but the 2nd fails:

irb(main):004:0> VirtualBox::Lib.lib
WIN32OLERuntimeError: failed to create WIN32OLE object from `VirtualBox.Session'

    HRESULT error code:0x80040154
      Class not registered
        from C:/Ruby186/lib/ruby/gems/1.8/gems/virtualbox-0.7.5/lib/virtualbox/com/mscom_interface.rb:29:in `initialize'
        from C:/Ruby186/lib/ruby/gems/1.8/gems/virtualbox-0.7.5/lib/virtualbox/com/mscom_interface.rb:29:in `new'
        from C:/Ruby186/lib/ruby/gems/1.8/gems/virtualbox-0.7.5/lib/virtualbox/com/mscom_interface.rb:29:in `initialize_for_version'
        from C:/Ruby186/lib/ruby/gems/1.8/gems/virtualbox-0.7.5/lib/virtualbox/com/mscom_interface.rb:21:in `initialize_mscom'
        from C:/Ruby186/lib/ruby/gems/1.8/gems/virtualbox-0.7.5/lib/virtualbox/com/mscom_interface.rb:20:in `each'
        from C:/Ruby186/lib/ruby/gems/1.8/gems/virtualbox-0.7.5/lib/virtualbox/com/mscom_interface.rb:20:in `initialize_mscom'
        from C:/Ruby186/lib/ruby/gems/1.8/gems/virtualbox-0.7.5/lib/virtualbox/com/mscom_interface.rb:13:in `initialize'
        from C:/Ruby186/lib/ruby/gems/1.8/gems/virtualbox-0.7.5/lib/virtualbox/lib.rb:73:in `new'
        from C:/Ruby186/lib/ruby/gems/1.8/gems/virtualbox-0.7.5/lib/virtualbox/lib.rb:73:in `initialize'
        from C:/Ruby186/lib/ruby/gems/1.8/gems/virtualbox-0.7.5/lib/virtualbox/lib.rb:39:in `new'
        from C:/Ruby186/lib/ruby/gems/1.8/gems/virtualbox-0.7.5/lib/virtualbox/lib.rb:39:in `lib'
        from (irb):4
        from :0
irb(main):005:0>

Anyhow, yeah. I'm actually on OS X, but I'm using virtualbox to distribute demo VMs and somebody just upgraded from 32-bit XP to 64-bit win7 and ran into this problem.

mitchellh commented 14 years ago

Although we talked in IRC, I want to make note here for other googlers or people searching by other means:

The main issue is that win32ole isn't supported on 64-bit windows systems yet, and from what I know there is no way around it. I haven't looked into this issue in a few months and I have a few new ideas but that where I am right now. I'll keep this updated.

hayeshaugen commented 14 years ago

To add a bit more google sauce:

Currently vagrant does not work with x64 Windows 7

stereobooster commented 12 years ago

The main issue is that win32ole isn't supported on 64-bit windows systems yet

Maybe I get something wrong, but it seems it supported

require 'win32ole'
vb = WIN32OLE.new("VirtualBox.VirtualBox")
p vb.version

outputs 4.1.6, but

WIN32OLE.new("VirtualBox.Session")

outputs

vagrant.git/_/1.rb:6:in `initialize': failed to create WIN32OLE object from `VirtualBox.Session' (WIN32OLERuntimeError)
    HRESULT error code:0x80040154