"A new version of $application is available, please update now. Rainbows and Unicorns await!"
Seeing this when you launch an application is the scourge of anyone who manages Macs in a lab environment. Hours of my life have been
wasted spent trying to disable or otherwise suppress this stuff. Some apps set this as a preference using Apple’s CFPreferences API (developers – this is how you should do it!), making it a case of just finding the appropriate key(s) and managing things with a Configuration Profile. If they use the Sparkle framework, then Allister Banks’ Extinguish script makes it even easier to manage the updates away. Other apps decide to do their own thing. Be it for cross-platform compatibility or another reason. VirtualBox, a free and awesome hypervisor, is one of our trickier customers.
If you’ve ever installed VirtualBox, you’ll know it’s frequently updated, and it checks for new versions on launch, displaying an informative message when one is available. Not ideal. And if we poke around in the Preferences dialog, we see it can be disabled:
VirtualBox stores preferences in its own XML file located here:
Take a peek inside, and the first thing you see is this:
** DO NOT EDIT THIS FILE. ** If you make changes to this file while any VirtualBox related application ** is running, your changes will be overwritten later, without taking effect. ** Use VBoxManage or the VirtualBox Manager GUI to make changes.
VBoxManage is a command line tool that can do anything and everything with VirtualBox. There’s a whole chapter devoted to it in the manual, here. It’s fantastic and you can use it to automate loads of things. Anyway, we’re interested in using its setextradata command. Do read that section of the chapter – it’s really informative, although it doesn’t tell us what the actual preference we want to set is. Unticking that Check for Update box, then peeking into the VirtualBox.xml file gives the game away (example below is from version 5.x):
Setting the preference with VBoxManage is just a case of running this as the current logged in user:
For VirtualBox version 5.x
/usr/local/bin/vboxmanage setextradata global GUI/UpdateDate never
For VirtualBox version 6.x (thanks to wejoey for the tip!)
/usr/local/bin/vboxmanage setextradata global GUI/PreventApplicationUpdate true
I couldn’t find a way to set preferences for VirtualBox globally (i.e. at the computer level), so I do it for each user individually. Not great, but something we can still automate and make happen when each user logs in. Please drop a comment below if you know how to set this at the computer level.
So, use your favourite tool to run this command at login, in the context of the current user. Here’s the script I use in a Jamf Pro login policy, which I scope to a Smart Group that only contains Macs with VirtualBox installed:
For VirtualBox version 5.x
For VirtualBox version 6.x
So, user logs in, command runs, VirtualBox nags no more. This all happens silently and you get to feel like a ninja.