a few years back, I wrote a VSPackage that needs to get a reference to TFS VersionControlServer on startup. However, this was problematic as Package.Initalize happens while the IDE is still in “Zombie” state. To know when Zombie state is done, you hook OnShellPropertyChanged and listen for propid = __VSSPROPID_Zombie, val = False. This worked fine in previous version of VS, but not VS2012, as it appeard TFS initializes later in the process. To Solve this, I am now listening for propid = __VSSPROPID_ShellInitialized.
Private _shellPropertyChangeCookie As UInteger Public Function OnShellPropertyChange(ByVal propid As Integer, ByVal var As Object) As Integer Implements IVsShellPropertyEvents.OnShellPropertyChange ' if the zombie state changes from true to false we can go ahead and ' ask for the DTE service and then stop listening for property change If propid = CInt(__VSSPROPID4.VSSPROPID_ShellInitialized) Then ' AndAlso CBool(var) = False Then Dim shellService As IVsShell = GetService(Of SVsShell, IVsShell)() If shellService IsNot Nothing Then ErrorHandler.ThrowOnFailure(shellService.UnadviseShellPropertyChanges(_shellPropertyChangeCookie)) _shellPropertyChangeCookie = 0 End If InitializeVersionControl() End If Return Microsoft.VisualStudio.VSConstants.S_OK End Function