I’d really like to thank Scott Hanselman for digging into the nitty gritty details of how to change the Visual Studio Default Browser.

But… let me cite one of the comments:

Should adding browser options to Visual Studio be <sarcasm>this easy</sarcasm>?

I hope we all agree on: Go fix this!

As I have not found my way to powershell (yet) and I want to have VS Integration (as Scott finalizes his post) too: Here comes the macro version…

Sub SetInternetExplorerAsDefaultBrowser()
    Dim FilePath As String = _
        Path.Combine( _
            Environment.GetFolderPath( _
                Environment.SpecialFolder.UserProfile), _
            "AppData\Local\Microsoft\VisualStudio\10.0\browsers.xml")

    Dim xml As String = "<?xml version=""1.0""?>" & vbCrLf & _
        "<BrowserInfo>" & _
        "<Browser>" & _
        "<Name>Internet Explorer</Name>" & _
        "<Path>""C:\Program Files (x86)\Internet Explorer\IEXPLORE.EXE""</Path>" & _
        "<Resolution>3</Resolution>" & _
        "<IsDefault>True</IsDefault>" & _
        "<DDE><Service>IExplore</Service>" & _
        "<TopicOpenURL>WWW_OpenURL</TopicOpenURL>" & _
        "<ItemOpenURL>""%s"",,0xffffffff,3,,,,</ItemOpenURL>" & _
        "<TopicActivate>WWW_Activate</TopicActivate>" & _
        "<ItemActivate>0xffffffff,0</ItemActivate>" & _
        "</DDE>" & _
        "</Browser>" & _
        "</BrowserInfo>"

    If (File.Exists(FilePath)) Then
        File.Delete(FilePath)
    End If

    Using sw As New StreamWriter(FilePath)
        sw.Write(xml)
    End Using

    Dim ConfigFile As New FileInfo(FilePath)

    Using key As RegistryKey = _
        Registry.CurrentUser.OpenSubKey( _
            "Software\" & _
                "Microsoft\" & _
                "VisualStudio\" & _
                "10.0\" & _
                "WebBrowser\" & _
                "ConfigTimestamp", _
            True)
        key.SetValue( _
            "LastConfigurationTimestamp", _
            DateTime.Now.ToUniversalTime().ToFileTime(), _
            RegistryValueKind.QWord)
        key.SetValue( _
            "CacheFileDateLastMod", _
            ConfigFile.LastWriteTimeUtc.ToFileTime(), _
            RegistryValueKind.QWord)
        key.SetValue( _
            "CacheFileSizeBytes", _
            ConfigFile.Length, _
            RegistryValueKind.DWord)
    End Using
End Sub