From e4b33eeac4e7cb0ce03757b4ddb84722eb47c344 Mon Sep 17 00:00:00 2001 From: Christian Hornung Date: Sun, 27 May 2007 15:41:16 +0000 Subject: [PATCH] Fixed forms designer to load successfully if registry access is denied in TypeResolutionService.RegisterVSDesignerWorkaround. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.1@2527 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Src/Services/TypeResolutionService.cs | 39 +++++++++++-------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/TypeResolutionService.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/TypeResolutionService.cs index b5ef78d4a5..49e6f9365f 100644 --- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/TypeResolutionService.cs +++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/TypeResolutionService.cs @@ -419,24 +419,29 @@ namespace ICSharpCode.FormsDesigner.Services { if (vsDesignerIdeDir == null) { vsDesignerIdeDir = ""; - RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\VisualStudio\8.0\Setup\VS"); - if (key != null) { - vsDesignerIdeDir = key.GetValue("VS7CommonDir") as string ?? ""; - if (vsDesignerIdeDir.Length > 0) { - vsDesignerIdeDir = Path.Combine(vsDesignerIdeDir, "IDE"); - AppDomain.CurrentDomain.AssemblyResolve += delegate(object sender, ResolveEventArgs args) { - string shortName = args.Name; - if (shortName.IndexOf(',') >= 0) { - shortName = shortName.Substring(0, shortName.IndexOf(',')); - } - if (shortName.StartsWith("Microsoft.") - && File.Exists(Path.Combine(vsDesignerIdeDir, shortName + ".dll"))) - { - return Assembly.LoadFrom(Path.Combine(vsDesignerIdeDir, shortName + ".dll")); - } - return null; - }; + try { + using(RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\VisualStudio\8.0\Setup\VS")) { + if (key != null) { + vsDesignerIdeDir = key.GetValue("VS7CommonDir") as string ?? ""; + } } + } catch (System.Security.SecurityException) { + // registry access might be denied + } + if (vsDesignerIdeDir.Length > 0) { + vsDesignerIdeDir = Path.Combine(vsDesignerIdeDir, "IDE"); + AppDomain.CurrentDomain.AssemblyResolve += delegate(object sender, ResolveEventArgs args) { + string shortName = args.Name; + if (shortName.IndexOf(',') >= 0) { + shortName = shortName.Substring(0, shortName.IndexOf(',')); + } + if (shortName.StartsWith("Microsoft.") + && File.Exists(Path.Combine(vsDesignerIdeDir, shortName + ".dll"))) + { + return Assembly.LoadFrom(Path.Combine(vsDesignerIdeDir, shortName + ".dll")); + } + return null; + }; } } }