/// <summary> /// Workarround for toolbar not being removed when add-in is /// uninstalled. /// </summary> private void RemovePermamanentUI(DevEnvironmentVersion devEnvironmentVersion) { try { // since command removal is dealing with CommandBar objects that are in // different namespaces and assemblies in .NET 1.1 and later versions, // removal process has been placed into implementation assemblies to // cope with these differences. Therefore corresponding method is called // using reflection mechanism. Assembly assembly = ImplementationAssemblyLoader.LoadMainAssembly(devEnvironmentVersion.RuntimeVersion); Type type = assembly.GetType("BuildAutoIncrement.PermanentUIRemover"); Debug.Assert(type != null); MethodInfo mi = type.GetMethod("Remove"); Debug.Assert(mi != null && mi.IsStatic); mi.Invoke(null, new object[] { devEnvironmentVersion.ProgId }); } catch (Exception e) { #if DEBUG_SETUP ExceptionForm.Show(e, devEnvironmentVersion.ProgId); #else string message = string.Format(ToolbarRemovalFailed, devEnvironmentVersion.Name) + Environment.NewLine + RemoveToolbarManually; MessageBox.Show(message, MessageBoxCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning); #endif } }
/// <summary> /// Check if PreloadAddinState key exists (i.e. if environment has been /// started after add-in installation). /// </summary> /// <param name="devEnvironmentVersion"></param> /// <returns></returns> private bool PreloadAddinStateExists(DevEnvironmentVersion devEnvironmentVersion) { using (RegistryKey rk = Registry.CurrentUser.OpenSubKey(PreloadAddinStateKey(devEnvironmentVersion), true)) { return(rk != null && devEnvironmentVersion.AddinProgId.Length > 0 && rk.GetValue(devEnvironmentVersion.AddinProgId) != null); } }
/// <summary> /// Deletes add-in entry in PreloadAddinState key of the current user. /// </summary> private void DeletePreloadAddinState(DevEnvironmentVersion devEnvironmentVersion) { using (RegistryKey rk = Registry.CurrentUser.OpenSubKey(PreloadAddinStateKey(devEnvironmentVersion), true)) { if (rk != null && devEnvironmentVersion.AddinProgId.Length > 0) { rk.DeleteValue(devEnvironmentVersion.AddinProgId, false); } } }
/// <summary> /// Checks if a version of Visual Studio is installed by reading /// the registry. /// </summary> /// <param name="devEnvironmentVersion"> /// Version of Visual Studio to check for. /// </param> /// <returns> /// <code>true</code> if Visual Studio is installed, otherwise /// <code>false</code>. /// </returns> private bool IsDevEnvironmentInstalled(DevEnvironmentVersion devEnvironmentVersion) { using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(string.Format(VisualStudioRegistryPath, devEnvironmentVersion.Version))) { if (rk == null) { return(false); } return(rk.GetValue("InstallDir") != null); } }
/// <summary> /// Gets the PreloadAddinState key. /// </summary> /// <param name="devEnvironmentVersion"></param> /// <returns> /// Full path to the registry key. /// </returns> private string PreloadAddinStateKey(DevEnvironmentVersion devEnvironmentVersion) { return(string.Format(VisualStudioRegistryPath + "\\{1}", devEnvironmentVersion.Version, PreloadAddinStateSubKey)); }