PageRenderTime 56ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/SolutionFramework/ControlProviders/ToolboxInstaller/Microsoft/VisualStudio/IDE/ToolboxControlsInstaller/ToolboxInstallerPackage.cs

#
C# | 941 lines | 848 code | 50 blank | 43 comment | 108 complexity | 8b1d4fcda5ff87114bef2d438365bb5f MD5 | raw file
Possible License(s): Apache-2.0, LGPL-3.0
  1. namespace Microsoft.VisualStudio.IDE.ToolboxControlsInstaller
  2. {
  3. using Microsoft.MetadataReader;
  4. using Microsoft.VisualStudio.OLE.Interop;
  5. using Microsoft.VisualStudio.Shell;
  6. using Microsoft.VisualStudio.Shell.Interop;
  7. using Microsoft.VisualStudio.Toolbox;
  8. using Microsoft.Win32;
  9. using System;
  10. using System.Collections;
  11. using System.Collections.Generic;
  12. using System.Diagnostics;
  13. using System.Drawing.Design;
  14. using System.Globalization;
  15. using System.IO;
  16. using System.Linq;
  17. using System.Reflection;
  18. using System.Runtime.CompilerServices;
  19. using System.Runtime.InteropServices;
  20. using System.Runtime.Versioning;
  21. using System.Security.Cryptography;
  22. using System.Text;
  23. using System.Threading;
  24. using System.Windows;
  25. public class ToolboxInstallerPackage : Package, IVsToolboxDataProvider
  26. {
  27. private List<RegisteredAssembly> _cachedAssemblies;
  28. private List<RegisteredAssembly> _registeredAssemblies;
  29. private static readonly int _silverlightFormat = DataFormats.GetDataFormat("CF_WINFXSILVERLIGHT_TOOL").Id;
  30. private const string _silverlightFormatString = "CF_WINFXSILVERLIGHT_TOOL";
  31. private const string DefaultCategory = "General";
  32. private const string DefaultWPFOrSilverlightCategory = "All Controls";
  33. private static SHA512 hashAlgorithm = SHA512.Create();
  34. private const string RegKey_Toolbox = "Toolbox";
  35. private const string ToolboxControlsInstaller = "ToolboxControlsInstaller";
  36. private const string ToolboxControlsInstallerCache = "ToolboxControlsInstallerCache";
  37. private const string ValueName_RegistryHash = "RegistryHash";
  38. public ToolboxInstallerPackage()
  39. {
  40. base.ToolboxInitialized += new EventHandler(this.PackageToolbox_ToolboxInitialized);
  41. base.ToolboxUpgraded += new EventHandler(this.PackageToolbox_ToolboxUpgraded);
  42. }
  43. private List<RegisteredAssembly> AddToolboxItems(List<RegisteredAssembly> assembliesToAddToToolbox)
  44. {
  45. if (assembliesToAddToToolbox.Count == 0)
  46. {
  47. return new List<RegisteredAssembly>();
  48. }
  49. List<RegisteredAssembly> list = new List<RegisteredAssembly>();
  50. IVsActivityLog log = base.GetService(typeof(SVsActivityLog)) as IVsActivityLog;
  51. log.LogEntry(3, this.ToString(), "Toolbox Controls Installer Package attempting to add Toolbox items");
  52. IToolboxService service = (IToolboxService) base.GetService(typeof(IToolboxService));
  53. ToolboxService.UnloadToolboxItems();
  54. XamlAssembly.UnloadAppDomain();
  55. List<string> list2 = new List<string>();
  56. List<string> list3 = new List<string>();
  57. foreach (RegisteredAssembly assembly in assembliesToAddToToolbox)
  58. {
  59. bool flag = false;
  60. try
  61. {
  62. if (assembly is XamlAssembly)
  63. {
  64. try
  65. {
  66. if (list3.Contains(assembly.AssemblyName.Name))
  67. {
  68. XamlAssembly.UnloadAppDomain();
  69. list3.Clear();
  70. }
  71. list3.Add(assembly.AssemblyName.Name);
  72. flag = assembly.AddItemsToToolbox(this, this.ApplicationRegistryRoot);
  73. goto Label_03FF;
  74. }
  75. catch (InvalidOperationException)
  76. {
  77. log.LogEntry(2, this.ToString(), string.Format("Error adding toolbox items from assembly {0}. WPF toolbox items might not be supported by this version of Visual Studio.", assembly.AssemblyName.FullName));
  78. continue;
  79. }
  80. }
  81. log.LogEntry(3, this.ToString(), string.Format(CultureInfo.CurrentCulture, "Attempting to get Toolbox items from Assembly {0}", new object[] { assembly.AssemblyName.FullName }));
  82. if (list2.Contains(assembly.AssemblyName.Name))
  83. {
  84. ToolboxService.UnloadToolboxItems();
  85. list2.Clear();
  86. }
  87. list2.Add(assembly.AssemblyName.Name);
  88. ICollection toolboxItems = ToolboxService.GetToolboxItems(assembly.AssemblyName, true);
  89. if (toolboxItems.Count == 0)
  90. {
  91. log.LogEntry(2, this.ToString(), string.Format(CultureInfo.CurrentCulture, "Assembly {0} did not contain any toolbox items. Please go to documentation for ToolboxService.GetToolboxItems for a list of toolbox item requirements.", new object[] { assembly.AssemblyName.FullName }));
  92. }
  93. foreach (ToolboxItem item in toolboxItems)
  94. {
  95. log.LogEntry(3, this.ToString(), string.Format(CultureInfo.CurrentCulture, "Attempting to add Toolbox item {0}", new object[] { item.TypeName }));
  96. string defaultCategory = assembly.DefaultCategory;
  97. if (assembly.ToolboxItemCategories.ContainsKey(item.TypeName))
  98. {
  99. defaultCategory = assembly.ToolboxItemCategories[item.TypeName];
  100. }
  101. if (string.IsNullOrEmpty(defaultCategory))
  102. {
  103. log.LogEntry(2, this.ToString(), string.Format(CultureInfo.CurrentCulture, "No category set for toolbox item {0}. Consider setting a default category on the assembly registration or create a Categories key to specify per-item categories.", new object[] { item.TypeName }));
  104. defaultCategory = "General";
  105. }
  106. if (string.IsNullOrEmpty(assembly.TargetFramework))
  107. {
  108. service.AddToolboxItem(item, defaultCategory);
  109. }
  110. else
  111. {
  112. IVsToolboxService service2 = service as IVsToolboxService;
  113. FrameworkName name = null;
  114. try
  115. {
  116. name = new FrameworkName(assembly.TargetFramework);
  117. }
  118. catch (ArgumentException)
  119. {
  120. log.LogEntry(2, this.ToString(), string.Format(CultureInfo.CurrentCulture, "Invalid framework {0} specified for toolbox item {1}. The item will be added without multi-targeting metadata.", new object[] { assembly.TargetFramework, item.TypeName }));
  121. }
  122. if (name == null)
  123. {
  124. service.AddToolboxItem(item, defaultCategory);
  125. }
  126. else
  127. {
  128. service2.AddToolboxItem(item, defaultCategory, new FrameworkName[] { name }, base.GetType().GUID);
  129. }
  130. }
  131. flag = true;
  132. assembly.RegisteredControls.Add(new DotNetControl(item.TypeName, item.DisplayName, item.Description));
  133. }
  134. }
  135. catch (ArgumentException exception)
  136. {
  137. log.LogEntry(1, this.ToString(), string.Format(CultureInfo.CurrentCulture, "{0}. Did you remember to add this assembly to the GAC or add a string value named CodeBase?", new object[] { exception.Message }));
  138. }
  139. catch (FileNotFoundException exception2)
  140. {
  141. log.LogEntry(1, this.ToString(), exception2.Message);
  142. }
  143. catch (FileLoadException exception3)
  144. {
  145. log.LogEntry(1, this.ToString(), exception3.Message);
  146. }
  147. catch (BadImageFormatException exception4)
  148. {
  149. log.LogEntry(1, this.ToString(), exception4.Message);
  150. }
  151. Label_03FF:
  152. if (flag)
  153. {
  154. list.Add(assembly);
  155. }
  156. }
  157. ToolboxService.UnloadToolboxItems();
  158. XamlAssembly.UnloadAppDomain();
  159. return list;
  160. }
  161. private void AppendRegistryContents(RegistryKey root, StringBuilder result)
  162. {
  163. result.Append(root.Name.Split(new char[] { '\\' }).Last<string>());
  164. foreach (string str in root.GetValueNames())
  165. {
  166. result.Append(str);
  167. result.Append(root.GetValue(str).ToString());
  168. }
  169. foreach (string str2 in root.GetSubKeyNames())
  170. {
  171. this.AppendRegistryContents(root.OpenSubKey(str2), result);
  172. }
  173. }
  174. private void ClearCache()
  175. {
  176. try
  177. {
  178. this.UserRegistryRoot.DeleteSubKeyTree("ToolboxControlsInstallerCache");
  179. }
  180. catch (ArgumentException)
  181. {
  182. }
  183. }
  184. private RegisteredAssembly CreateRegisteredAssembly(RegistryKey key, string keyName)
  185. {
  186. if (!string.IsNullOrEmpty(key.GetValue("SilverlightControls") as string))
  187. {
  188. return new SilverlightAssembly(new AssemblyName(keyName));
  189. }
  190. if (!string.IsNullOrEmpty(key.GetValue("WPFControls") as string))
  191. {
  192. return new WPFAssembly(new AssemblyName(keyName));
  193. }
  194. return new DotNetAssembly(new AssemblyName(keyName));
  195. }
  196. private IEnumerable<AssemblyFolder> GetAllAssemblyFoldersEx()
  197. {
  198. Action<string> log = null;
  199. foreach (string iteratorVariable0 in this.GetInstalledFrameworks())
  200. {
  201. foreach (RegistryKey iteratorVariable1 in this.GetAssemblyFoldersExKeys(iteratorVariable0))
  202. {
  203. foreach (string iteratorVariable2 in iteratorVariable1.GetSubKeyNames())
  204. {
  205. using (RegistryKey iteratorVariable3 = iteratorVariable1.OpenSubKey(iteratorVariable2))
  206. {
  207. using (RegistryKey iteratorVariable4 = this.HighestServicePack(iteratorVariable3))
  208. {
  209. using (RegistryKey iteratorVariable5 = iteratorVariable4.OpenSubKey("Toolbox") ?? iteratorVariable3.OpenSubKey("Toolbox"))
  210. {
  211. if (iteratorVariable5 != null)
  212. {
  213. byte[] first = this.RegistryTreeHash(iteratorVariable3);
  214. CachedAssemblyFolder cache = CachedAssemblyFolder.GetCache(this.UserRegistryRoot, iteratorVariable3.Name);
  215. if ((cache != null) && first.SequenceEqual<byte>(cache.RegistryHash))
  216. {
  217. yield return cache;
  218. }
  219. else
  220. {
  221. if (log == null)
  222. {
  223. log = delegate (string errMsg) {
  224. (base.GetService(typeof(SVsActivityLog)) as IVsActivityLog).LogEntry(1, this.ToString(), errMsg);
  225. };
  226. }
  227. NonCachedAssemblyFolder iteratorVariable8 = new NonCachedAssemblyFolder(iteratorVariable0, iteratorVariable4.GetValue("") as string, iteratorVariable5.GetValue("TabName") as string, log);
  228. iteratorVariable8.Cache(this.UserRegistryRoot, iteratorVariable3.Name, first);
  229. yield return iteratorVariable8;
  230. }
  231. }
  232. }
  233. }
  234. }
  235. }
  236. }
  237. }
  238. }
  239. private IEnumerable<RegistryKey> GetAssemblyFoldersExKeys(string tfm)
  240. {
  241. return new AssemblyFoldersExKeys(-2) { __this = this, __tfm = tfm };
  242. }
  243. private List<RegisteredAssembly> GetCachedAssemblies()
  244. {
  245. if (this._cachedAssemblies == null)
  246. {
  247. this._cachedAssemblies = new List<RegisteredAssembly>();
  248. RegistryKey key = this.UserRegistryRoot.OpenSubKey("ToolboxControlsInstallerCache");
  249. foreach (string str in key.GetSubKeyNames())
  250. {
  251. RegisteredAssembly item = new RegisteredAssembly(new AssemblyName(str));
  252. this._cachedAssemblies.Add(item);
  253. RegistryKey key2 = key.OpenSubKey(str);
  254. item.RegistryHash = key2.GetValue("RegistryHash") as byte[];
  255. foreach (string str2 in key2.GetSubKeyNames())
  256. {
  257. RegistryKey key3 = key2.OpenSubKey(str2);
  258. if (key3.GetValue(SilverlightControl.StaticRegDescriptorValue) != null)
  259. {
  260. item.RegisteredControls.Add(new SilverlightControl(str2, this.GetRegValues(key3)));
  261. }
  262. else if (key3.GetValue(WPFControl.StaticRegDescriptorValue) != null)
  263. {
  264. item.RegisteredControls.Add(new WPFControl(str2, this.GetRegValues(key3)));
  265. }
  266. else
  267. {
  268. string displayName = key3.GetValue(null).ToString();
  269. string description = key3.GetValue("Description").ToString();
  270. item.RegisteredControls.Add(new DotNetControl(str2, displayName, description));
  271. }
  272. }
  273. }
  274. }
  275. return this._cachedAssemblies;
  276. }
  277. private IEnumerable<string> GetInstalledFrameworks()
  278. {
  279. Array prgSupportedFrameworks = null;
  280. (base.GetService(typeof(Microsoft.VisualStudio.Shell.Interop.SVsFrameworkMultiTargeting)) as Microsoft.VisualStudio.Shell.Interop.IVsFrameworkMultiTargeting).GetSupportedFrameworks(out prgSupportedFrameworks);
  281. return (from s in (string[]) prgSupportedFrameworks
  282. where string.IsNullOrEmpty(new FrameworkName(s).Profile)
  283. select s);
  284. }
  285. private List<RegisteredAssembly> GetRegisteredAssemblies()
  286. {
  287. if (this._registeredAssemblies == null)
  288. {
  289. this._registeredAssemblies = new List<RegisteredAssembly>();
  290. foreach (RegistryKey key2 in new List<RegistryKey> { this.UserRegistryRoot, this.ApplicationRegistryRoot })
  291. {
  292. RegistryKey key = key2.OpenSubKey("ToolboxControlsInstaller");
  293. if (key != null)
  294. {
  295. foreach (string str in key.GetSubKeyNames())
  296. {
  297. RegistryKey key3 = key.OpenSubKey(str);
  298. RegisteredAssembly item = this.CreateRegisteredAssembly(key3, str);
  299. item.AssemblyName.CodeBase = key3.GetValue("Codebase") as string;
  300. item.DefaultCategory = key3.GetValue("") as string;
  301. item.TargetFramework = key3.GetValue("TargetFramework") as string;
  302. item.RegistryHash = this.RegistryTreeHash(key3);
  303. RegistryKey key4 = key3.OpenSubKey("ItemCategories");
  304. if (key4 != null)
  305. {
  306. foreach (string str2 in key4.GetValueNames())
  307. {
  308. item.ToolboxItemCategories.Add(str2, key4.GetValue(str2).ToString());
  309. }
  310. }
  311. if (!this._registeredAssemblies.Contains(item))
  312. {
  313. this._registeredAssemblies.Add(item);
  314. }
  315. }
  316. }
  317. }
  318. foreach (AssemblyFolder folder in this.GetAllAssemblyFoldersEx())
  319. {
  320. foreach (RegisteredAssembly assembly2 in folder.GetAssemblies())
  321. {
  322. if (!this._registeredAssemblies.Contains(assembly2))
  323. {
  324. this._registeredAssemblies.Add(assembly2);
  325. }
  326. }
  327. }
  328. }
  329. return this._registeredAssemblies;
  330. }
  331. private List<RegisteredAssembly> GetRegisteredNotCachedAssemblies()
  332. {
  333. List<RegisteredAssembly> cachedAssemblies = this.GetCachedAssemblies();
  334. return (from registeredAssembly in this.GetRegisteredAssemblies()
  335. where !cachedAssemblies.Contains(registeredAssembly)
  336. select registeredAssembly).ToList<RegisteredAssembly>();
  337. }
  338. private IDictionary GetRegValues(RegistryKey key)
  339. {
  340. IDictionary dictionary = new Hashtable();
  341. foreach (string str in key.GetValueNames())
  342. {
  343. dictionary.Add(str, key.GetValue(str).ToString());
  344. }
  345. return dictionary;
  346. }
  347. private List<RegisteredAssembly> GetRemovedAssemblies()
  348. {
  349. List<RegisteredAssembly> registeredAssemblies = this.GetRegisteredAssemblies();
  350. return (from cachedAssembly in this.GetCachedAssemblies()
  351. where !registeredAssemblies.Contains(cachedAssembly)
  352. select cachedAssembly).ToList<RegisteredAssembly>();
  353. }
  354. private IEnumerable<Microsoft.VisualStudio.OLE.Interop.IDataObject> GetToolboxDataObjects(IVsToolbox2 toolboxSvc)
  355. {
  356. new List<Microsoft.VisualStudio.OLE.Interop.IDataObject>();
  357. IEnumToolboxItems pEnum = null;
  358. toolboxSvc.EnumItems(null, out pEnum);
  359. Microsoft.VisualStudio.OLE.Interop.IDataObject[] rgelt = new Microsoft.VisualStudio.OLE.Interop.IDataObject[1];
  360. uint pceltFetched = 0;
  361. pEnum.Reset();
  362. while (true)
  363. {
  364. if ((pEnum.Next(1, rgelt, out pceltFetched) != 0) || (pceltFetched != 1))
  365. {
  366. yield break;
  367. }
  368. yield return rgelt[0];
  369. }
  370. }
  371. private static bool HasReference(Assembly assembly, string referenceName)
  372. {
  373. return assembly.GetReferencedAssemblies().Any<AssemblyName>(n => (string.Compare(n.Name, referenceName, StringComparison.OrdinalIgnoreCase) == 0));
  374. }
  375. private RegistryKey HighestServicePack(RegistryKey assemblyFolderKey)
  376. {
  377. foreach (string str in from s in assemblyFolderKey.GetSubKeyNames()
  378. orderby s descending
  379. select s)
  380. {
  381. if (str != "Toolbox")
  382. {
  383. RegistryKey key = assemblyFolderKey.OpenSubKey(str);
  384. if (!string.IsNullOrEmpty(key.GetValue("") as string))
  385. {
  386. return key;
  387. }
  388. }
  389. }
  390. return assemblyFolderKey;
  391. }
  392. int IVsToolboxDataProvider.FileDropped(string fileName, IVsHierarchy pHierSource, out int accepted)
  393. {
  394. accepted = 0;
  395. //using (DefaultUniverse universe = new DefaultUniverse())
  396. //{
  397. // Assembly assembly = universe.LoadAssemblyFromFile(fileName);
  398. // RegisteredAssembly assembly2 = null;
  399. // if (HasReference(assembly, "PresentationFramework"))
  400. // {
  401. // assembly2 = new WPFAssembly(assembly.GetName());
  402. // IVsTargetFrameworkAssemblies service = base.GetService(typeof(SVsTargetFrameworkAssemblies)) as IVsTargetFrameworkAssemblies;
  403. // uint pTargetFrameworkVersion = 0;
  404. // service.GetRequiredTargetFrameworkVersionFromDependency(fileName, out pTargetFrameworkVersion);
  405. // if (pTargetFrameworkVersion != 0)
  406. // {
  407. // assembly2.TargetFramework = ".NETFramework,Version=v" + ((pTargetFrameworkVersion >> 0x10)).ToString() + "." + ((pTargetFrameworkVersion & 0xffff)).ToString();
  408. // }
  409. // }
  410. // else if (HasReference(assembly, "System.Windows"))
  411. // {
  412. // assembly2 = new SilverlightAssembly(assembly.GetName());
  413. // }
  414. // if (assembly2 != null)
  415. // {
  416. // List<RegisteredAssembly> assembliesToAddToToolbox = new List<RegisteredAssembly> {
  417. // assembly2
  418. // };
  419. // if (this.AddToolboxItems(assembliesToAddToToolbox).Count > 0)
  420. // {
  421. // accepted = 1;
  422. // }
  423. // }
  424. //}
  425. return 0;
  426. }
  427. int IVsToolboxDataProvider.GetItemInfo(Microsoft.VisualStudio.OLE.Interop.IDataObject pDO, TBXITEMINFO[] pItemInfo)
  428. {
  429. return -2147467263;
  430. }
  431. int IVsToolboxDataProvider.IsDataSupported(FORMATETC[] fetc, STGMEDIUM[] stg)
  432. {
  433. return -2147467263;
  434. }
  435. int IVsToolboxDataProvider.IsSupported(Microsoft.VisualStudio.OLE.Interop.IDataObject pDO)
  436. {
  437. return -2147467263;
  438. }
  439. public void ToolboxInitialize()
  440. {
  441. //this.ClearCache();
  442. this.PackageToolbox_ToolboxUpgraded(null, EventArgs.Empty);
  443. }
  444. private void PackageToolbox_ToolboxInitialized(object sender, EventArgs e)
  445. {
  446. this.ClearCache();
  447. this.PackageToolbox_ToolboxUpgraded(sender, e);
  448. }
  449. private void PackageToolbox_ToolboxUpgraded(object sender, EventArgs e)
  450. {
  451. //if (this.RegistryUpdated())
  452. //{
  453. List<RegisteredAssembly> registeredNotCachedAssemblies = this.GetRegisteredNotCachedAssemblies();
  454. List<RegisteredAssembly> removedAssemblies = this.GetRemovedAssemblies();
  455. this.RemoveToolboxItems(removedAssemblies);
  456. List<RegisteredAssembly> installedAssemblies = this.AddToolboxItems(registeredNotCachedAssemblies);
  457. this.UpdateCache(installedAssemblies, removedAssemblies);
  458. //}
  459. }
  460. private byte[] RegistryTreeHash(RegistryKey root)
  461. {
  462. StringBuilder result = new StringBuilder();
  463. this.AppendRegistryContents(root, result);
  464. return hashAlgorithm.ComputeHash(Encoding.UTF8.GetBytes(result.ToString()));
  465. }
  466. private bool RegistryUpdated()
  467. {
  468. byte[] first = new byte[0];
  469. using (RegistryKey key = this.UserRegistryRoot.OpenSubKey("ToolboxControlsInstallerCache"))
  470. {
  471. if (key != null)
  472. {
  473. byte[] buffer2 = key.GetValue("RegistryHash") as byte[];
  474. if (buffer2 != null)
  475. {
  476. first = buffer2;
  477. }
  478. }
  479. }
  480. StringBuilder result = new StringBuilder();
  481. foreach (RegistryKey key2 in new RegistryKey[] { this.ApplicationRegistryRoot, this.UserRegistryRoot })
  482. {
  483. using (RegistryKey key3 = key2.OpenSubKey("ToolboxControlsInstaller"))
  484. {
  485. if (key3 != null)
  486. {
  487. this.AppendRegistryContents(key3, result);
  488. }
  489. }
  490. }
  491. foreach (string str in this.GetInstalledFrameworks())
  492. {
  493. foreach (RegistryKey key4 in this.GetAssemblyFoldersExKeys(str))
  494. {
  495. this.AppendRegistryContents(key4, result);
  496. }
  497. }
  498. byte[] second = hashAlgorithm.ComputeHash(Encoding.UTF8.GetBytes(result.ToString()));
  499. if (first.SequenceEqual<byte>(second))
  500. {
  501. return false;
  502. }
  503. using (RegistryKey key5 = this.UserRegistryRoot.CreateSubKey("ToolboxControlsInstallerCache"))
  504. {
  505. key5.SetValue("RegistryHash", second);
  506. }
  507. return true;
  508. }
  509. private void RemoveToolboxItems(List<RegisteredAssembly> assembliesWithComponentToRemove)
  510. {
  511. if (assembliesWithComponentToRemove.Count != 0)
  512. {
  513. List<ToolboxItem> list = new List<ToolboxItem>();
  514. List<Microsoft.VisualStudio.OLE.Interop.IDataObject> list2 = new List<Microsoft.VisualStudio.OLE.Interop.IDataObject>();
  515. IVsToolbox2 toolboxSvc = base.GetService(typeof(SVsToolbox)) as IVsToolbox2;
  516. IToolboxService service = (IToolboxService) base.GetService(typeof(IToolboxService));
  517. if ((service != null) && (toolboxSvc != null))
  518. {
  519. ToolboxItemCollection toolboxItems = null;
  520. foreach (RegisteredAssembly assembly in assembliesWithComponentToRemove)
  521. {
  522. foreach (RegisteredControl control in assembly.RegisteredControls)
  523. {
  524. DictionaryControl control2 = control as DictionaryControl;
  525. if (control2 != null)
  526. {
  527. foreach (Microsoft.VisualStudio.OLE.Interop.IDataObject obj2 in this.GetToolboxDataObjects(toolboxSvc))
  528. {
  529. if (control2.IsEqualTo(obj2))
  530. {
  531. list2.Add(obj2);
  532. }
  533. }
  534. }
  535. else
  536. {
  537. DotNetControl control3 = control as DotNetControl;
  538. if (control3 != null)
  539. {
  540. if (toolboxItems == null)
  541. {
  542. toolboxItems = service.GetToolboxItems();
  543. }
  544. foreach (ToolboxItem item in toolboxItems)
  545. {
  546. if (((item.TypeName == control3.TypeName) && (item.DisplayName == control3.DisplayName)) && (item.AssemblyName.FullName == assembly.AssemblyName.FullName))
  547. {
  548. list.Add(item);
  549. }
  550. }
  551. }
  552. }
  553. }
  554. }
  555. foreach (ToolboxItem item2 in list)
  556. {
  557. service.RemoveToolboxItem(item2);
  558. }
  559. foreach (Microsoft.VisualStudio.OLE.Interop.IDataObject obj3 in list2)
  560. {
  561. toolboxSvc.RemoveItem(obj3);
  562. }
  563. }
  564. }
  565. }
  566. private void UpdateCache(List<RegisteredAssembly> installedAssemblies, List<RegisteredAssembly> uninstalledAssemblies)
  567. {
  568. RegistryKey key = this.UserRegistryRoot.CreateSubKey("ToolboxControlsInstallerCache");
  569. foreach (RegisteredAssembly assembly in uninstalledAssemblies)
  570. {
  571. try
  572. {
  573. key.DeleteSubKeyTree(assembly.AssemblyName.FullName);
  574. }
  575. catch (ArgumentException)
  576. {
  577. }
  578. }
  579. foreach (RegisteredAssembly assembly2 in installedAssemblies)
  580. {
  581. if (key.OpenSubKey(assembly2.AssemblyName.FullName) != null)
  582. {
  583. throw new ArgumentException("Assembly has to be uninstalled before it can be installed");
  584. }
  585. RegistryKey key2 = key.CreateSubKey(assembly2.AssemblyName.FullName);
  586. key2.SetValue("RegistryHash", assembly2.RegistryHash);
  587. foreach (RegisteredControl control in assembly2.RegisteredControls)
  588. {
  589. RegistryKey key3 = key2.CreateSubKey(control.TypeName);
  590. DictionaryControl control2 = control as DictionaryControl;
  591. if (control2 != null)
  592. {
  593. key3.SetValue("CreationAssemblyName", control2.Properties["CreationAssemblyName"], RegistryValueKind.String);
  594. key3.SetValue("CreationTypeName", control2.Properties["CreationTypeName"], RegistryValueKind.String);
  595. key3.SetValue("ToolTypeName", control2.Properties["ToolTypeName"], RegistryValueKind.String);
  596. }
  597. else
  598. {
  599. DotNetControl control3 = control as DotNetControl;
  600. if (control3 != null)
  601. {
  602. key3.SetValue(null, control3.DisplayName, RegistryValueKind.String);
  603. key3.SetValue("description", control3.Description, RegistryValueKind.String);
  604. }
  605. }
  606. if (!string.IsNullOrEmpty(control.RegDescriptorValue))
  607. {
  608. key3.SetValue(control.RegDescriptorValue, 1, RegistryValueKind.DWord);
  609. }
  610. }
  611. }
  612. }
  613. [CompilerGenerated]
  614. private sealed class AssemblyFoldersExKeys : IEnumerable<RegistryKey>, IEnumerable, IEnumerator<RegistryKey>, IEnumerator, IDisposable
  615. {
  616. private int state;
  617. private RegistryKey current;
  618. public string __tfm;
  619. public ToolboxInstallerPackage __this;
  620. public RegistryKey[] __wrap33;
  621. public int __wrap34;
  622. public string[] __wrap37;
  623. public int __wrap38;
  624. public string[] __wrap3a;
  625. public int __wrap3b;
  626. private int initialThreadId;
  627. public RegistryKey afeKey5__2e;
  628. public RegistryKey fxKey_5__2d;
  629. public string fxName_5__2c;
  630. public RegistryKey fxRootKey_5__2b;
  631. public string fxRootPath_5__28;
  632. public FrameworkName name_5__27;
  633. public RegistryKey root_5__2a;
  634. public RegistryKey[] roots_5__26;
  635. public RegistryKey subAfeKey_5__31;
  636. public RegistryKey subkey_5__30;
  637. public string subkeyName_5__2f;
  638. public string tfmVersion_5__29;
  639. public string tfm;
  640. [DebuggerHidden]
  641. public AssemblyFoldersExKeys(int state)
  642. {
  643. this.state = state;
  644. this.initialThreadId = Thread.CurrentThread.ManagedThreadId;
  645. }
  646. private void m__Finally32()
  647. {
  648. this.state = -1;
  649. }
  650. private void m__Finally35()
  651. {
  652. this.state = 1;
  653. if (this.fxRootKey_5__2b != null)
  654. {
  655. this.fxRootKey_5__2b.Dispose();
  656. }
  657. }
  658. private void m__Finally36()
  659. {
  660. this.state = 2;
  661. }
  662. private void m__Finally39()
  663. {
  664. this.state = 3;
  665. }
  666. private void m__Finally3c()
  667. {
  668. this.state = 5;
  669. if (this.subkey_5__30 != null)
  670. {
  671. this.subkey_5__30.Dispose();
  672. }
  673. }
  674. public bool MoveNext()
  675. {
  676. try
  677. {
  678. int num = this.state;
  679. if (num != 0)
  680. {
  681. //if (num == 4)
  682. //{
  683. // goto Label_01E3;
  684. //}
  685. //if (num == 7)
  686. //{
  687. // goto Label_027C;
  688. //}
  689. }
  690. else
  691. {
  692. this.state = -1;
  693. this.roots_5__26 = new RegistryKey[] { Registry.CurrentUser, Registry.LocalMachine };
  694. this.name_5__27 = new FrameworkName(this.tfm);
  695. if (string.Compare(this.name_5__27.Identifier, "silverlight", StringComparison.OrdinalIgnoreCase) == 0)
  696. {
  697. this.fxRootPath_5__28 = @"Software\Microsoft\Microsoft SDKs\" + this.name_5__27.Identifier;
  698. }
  699. else
  700. {
  701. this.fxRootPath_5__28 = @"Software\Microsoft\" + this.name_5__27.Identifier;
  702. }
  703. this.tfmVersion_5__29 = "v" + this.name_5__27.Version;
  704. this.state = 1;
  705. this.__wrap33 = this.roots_5__26;
  706. this.__wrap34 = 0;
  707. while (this.__wrap34 < this.__wrap33.Length)
  708. {
  709. this.root_5__2a = this.__wrap33[this.__wrap34];
  710. this.fxRootKey_5__2b = this.root_5__2a.OpenSubKey(this.fxRootPath_5__28);
  711. this.state = 2;
  712. if (this.fxRootKey_5__2b != null)
  713. {
  714. this.state = 3;
  715. this.__wrap37 = this.fxRootKey_5__2b.GetSubKeyNames();
  716. this.__wrap38 = 0;
  717. while (this.__wrap38 < this.__wrap37.Length)
  718. {
  719. {
  720. this.fxName_5__2c = this.__wrap37[this.__wrap38];
  721. if ((this.fxName_5__2c.Length < this.tfmVersion_5__29.Length) || (string.Compare(this.fxName_5__2c.Substring(0, this.tfmVersion_5__29.Length), this.tfmVersion_5__29, StringComparison.OrdinalIgnoreCase) != 0))
  722. {
  723. goto Label_02B0;
  724. }
  725. this.fxKey_5__2d = this.fxRootKey_5__2b.OpenSubKey(this.fxName_5__2c);
  726. this.afeKey5__2e = this.fxKey_5__2d.OpenSubKey("AssemblyFoldersEx");
  727. if (this.afeKey5__2e == null)
  728. {
  729. goto Label_01EF;
  730. }
  731. this.current = this.afeKey5__2e;
  732. this.state = 4;
  733. return true;
  734. }
  735. Label_01E3:
  736. this.state = 3;
  737. goto Label_02B0;
  738. Label_01EF:
  739. this.state = 5;
  740. this.__wrap3a = this.fxKey_5__2d.GetSubKeyNames();
  741. this.__wrap3b = 0;
  742. while (this.__wrap3b < this.__wrap3a.Length)
  743. {
  744. this.subkeyName_5__2f = this.__wrap3a[this.__wrap3b];
  745. this.subkey_5__30 = this.fxKey_5__2d.OpenSubKey(this.subkeyName_5__2f);
  746. this.state = 6;
  747. this.subAfeKey_5__31 = this.subkey_5__30.OpenSubKey("AssemblyFoldersEx");
  748. if (this.subAfeKey_5__31 == null)
  749. {
  750. goto Label_0283;
  751. }
  752. this.current = this.subAfeKey_5__31;
  753. this.state = 7;
  754. return true;
  755. Label_027C:
  756. this.state = 6;
  757. Label_0283:
  758. this.m__Finally3c();
  759. this.__wrap3b++;
  760. }
  761. this.m__Finally39();
  762. Label_02B0:
  763. this.__wrap38++;
  764. }
  765. this.m__Finally36();
  766. }
  767. this.m__Finally35();
  768. this.__wrap34++;
  769. }
  770. this.m__Finally32();
  771. }
  772. return false;
  773. }
  774. catch
  775. {
  776. return false;
  777. }
  778. return true;
  779. }
  780. [DebuggerHidden]
  781. IEnumerator<RegistryKey> IEnumerable<RegistryKey>.GetEnumerator()
  782. {
  783. ToolboxInstallerPackage.AssemblyFoldersExKeys d__;
  784. if ((Thread.CurrentThread.ManagedThreadId == this.initialThreadId) && (this.state == -2))
  785. {
  786. this.state = 0;
  787. d__ = this;
  788. }
  789. else
  790. {
  791. d__ = new ToolboxInstallerPackage.AssemblyFoldersExKeys(0) {
  792. __this = this.__this
  793. };
  794. }
  795. d__.tfm = this.__tfm;
  796. return d__;
  797. }
  798. [DebuggerHidden]
  799. IEnumerator IEnumerable.GetEnumerator()
  800. {
  801. return null;
  802. //return System.Collections.Generic.IEnumerable<Microsoft.Win32.RegistryKey>.GetEnumerator();
  803. }
  804. [DebuggerHidden]
  805. void IEnumerator.Reset()
  806. {
  807. throw new NotSupportedException();
  808. }
  809. void IDisposable.Dispose()
  810. {
  811. switch (this.state)
  812. {
  813. case 1:
  814. case 2:
  815. case 3:
  816. case 4:
  817. case 5:
  818. case 6:
  819. case 7:
  820. switch (this.state)
  821. {
  822. case 2:
  823. case 3:
  824. case 4:
  825. case 5:
  826. case 6:
  827. case 7:
  828. try
  829. {
  830. switch (this.state)
  831. {
  832. case 3:
  833. case 4:
  834. case 5:
  835. case 6:
  836. case 7:
  837. switch (this.state)
  838. {
  839. }
  840. goto Label_00C1;
  841. default:
  842. break;
  843. }
  844. switch (this.state)
  845. {
  846. case 6:
  847. case 7:
  848. try
  849. {
  850. }
  851. finally
  852. {
  853. this.m__Finally3c();
  854. }
  855. break;
  856. }
  857. this.m__Finally39();
  858. Label_00C1:
  859. this.m__Finally36();
  860. }
  861. finally
  862. {
  863. this.m__Finally35();
  864. }
  865. break;
  866. }
  867. break;
  868. default:
  869. return;
  870. }
  871. this.m__Finally32();
  872. }
  873. RegistryKey IEnumerator<RegistryKey>.Current
  874. {
  875. [DebuggerHidden]
  876. get
  877. {
  878. return this.current;
  879. }
  880. }
  881. object IEnumerator.Current
  882. {
  883. [DebuggerHidden]
  884. get
  885. {
  886. return this.current;
  887. }
  888. }
  889. }
  890. }
  891. }