Browse Source

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
shortcuts
Christian Hornung 19 years ago
parent
commit
e4b33eeac4
  1. 39
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/TypeResolutionService.cs

39
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/TypeResolutionService.cs

@ -419,24 +419,29 @@ namespace ICSharpCode.FormsDesigner.Services @@ -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;
};
}
}
}

Loading…
Cancel
Save