Example #1
0
        public static void VerifyPlatformDependencies(AssemblyManifest appManifest, AssemblyManifest deployManifest, string tempDir)
        {
            Logger.AddMethodCall("VerifyPlatformDependencies called.");
            string      description = null;
            Uri         supportUri  = deployManifest.Description.SupportUri;
            DependentOS dependentOS = appManifest.DependentOS;

            if (dependentOS != null)
            {
                OSDependency osd = new OSDependency(dependentOS.MajorVersion, dependentOS.MinorVersion, dependentOS.BuildNumber, dependentOS.ServicePackMajor, dependentOS.ServicePackMinor, null, null);
                if (!VerifyOSDependency(ref osd))
                {
                    StringBuilder builder = new StringBuilder();
                    string        str2    = string.Concat(new object[] { dependentOS.MajorVersion, ".", dependentOS.MinorVersion, ".", dependentOS.BuildNumber, ".", dependentOS.ServicePackMajor, dependentOS.ServicePackMinor });
                    builder.AppendFormat(Resources.GetString("PlatformMicrosoftWindowsOperatingSystem"), str2);
                    description = builder.ToString();
                    if (dependentOS.SupportUrl != null)
                    {
                        supportUri = dependentOS.SupportUrl;
                    }
                    throw new DependentPlatformMissingException(string.Format(CultureInfo.CurrentUICulture, Resources.GetString("ErrorMessage_PlatformDetectionFailed"), new object[] { description }), supportUri);
                }
            }
            Version v    = Constants.V2CLRVersion;
            string  str3 = v.ToString(3);
            string  processorArchitecture = appManifest.Identity.ProcessorArchitecture;
            Uri     supportUrl            = supportUri;

            if (appManifest.CLRDependentAssembly != null)
            {
                v    = appManifest.CLRDependentAssembly.Identity.Version;
                str3 = v.ToString(3);
                processorArchitecture = appManifest.CLRDependentAssembly.Identity.ProcessorArchitecture;
                if (appManifest.CLRDependentAssembly.SupportUrl != null)
                {
                    supportUrl = appManifest.CLRDependentAssembly.SupportUrl;
                }
                if (appManifest.CLRDependentAssembly.Description != null)
                {
                    description = appManifest.CLRDependentAssembly.Description;
                }
            }
            if (deployManifest.CompatibleFrameworks == null)
            {
                if (v >= Constants.V4CLRVersion)
                {
                    throw new InvalidDeploymentException(ExceptionTypes.ManifestSemanticValidation, Resources.GetString("Ex_SemanticallyInvalidDeploymentManifest"), new InvalidDeploymentException(ExceptionTypes.InvalidManifest, Resources.GetString("Ex_DepMissingCompatibleFrameworks")));
                }
                if (!VerifyCLRVersionInfo(v, processorArchitecture))
                {
                    StringBuilder builder2 = new StringBuilder();
                    if (description == null)
                    {
                        builder2.AppendFormat(Resources.GetString("PlatformMicrosoftCommonLanguageRuntime"), str3);
                        description = builder2.ToString();
                    }
                    supportUri = supportUrl;
                    throw new SupportedRuntimeMissingException(string.Format(CultureInfo.CurrentUICulture, Resources.GetString("ErrorMessage_PlatformDetectionFailed"), new object[] { description }), supportUri, str3);
                }
            }
            else
            {
                bool flag = false;
                for (int i = 0; i < deployManifest.CompatibleFrameworks.Frameworks.Count; i++)
                {
                    if (CheckCompatibleFramework(deployManifest.CompatibleFrameworks.Frameworks[i], ref v, ref str3, processorArchitecture))
                    {
                        flag = true;
                        break;
                    }
                }
                if (!flag)
                {
                    if (deployManifest.CompatibleFrameworks.SupportUrl != null)
                    {
                        supportUri = deployManifest.CompatibleFrameworks.SupportUrl;
                    }
                    else
                    {
                        supportUri = supportUrl;
                    }
                    throw new CompatibleFrameworkMissingException(string.Format(CultureInfo.CurrentUICulture, Resources.GetString("ErrorMessage_CompatiblePlatformDetectionFailed"), new object[] { FormatFrameworkString(deployManifest.CompatibleFrameworks.Frameworks[0]) }), supportUri, deployManifest.CompatibleFrameworks);
                }
            }
            Logger.AddPhaseInformation(Resources.GetString("CompatibleRuntimeFound"), new object[] { str3 });
            bool fetchRuntimeHost = false;

            if (v < Constants.V4CLRVersion)
            {
                fetchRuntimeHost = true;
            }
            using (System.Deployment.Application.NativeMethods.CCorRuntimeHost host = null)
            {
                System.Deployment.Application.NativeMethods.IAssemblyCache assemblyCache = System.Deployment.Application.NativeMethods.GetAssemblyCacheInterface(str3, fetchRuntimeHost, out host);
                if ((assemblyCache == null) || (fetchRuntimeHost && (host == null)))
                {
                    StringBuilder builder3 = new StringBuilder();
                    builder3.AppendFormat(Resources.GetString("PlatformMicrosoftCommonLanguageRuntime"), str3);
                    description = builder3.ToString();
                    supportUri  = supportUrl;
                    throw new DependentPlatformMissingException(string.Format(CultureInfo.CurrentUICulture, Resources.GetString("ErrorMessage_PlatformDetectionFailed"), new object[] { description }), supportUri);
                }
                bool flag3 = false;
                bool flag4 = false;
                if (fetchRuntimeHost && !PolicyKeys.SkipSKUDetection())
                {
                    foreach (DependentAssembly assembly in appManifest.DependentAssemblies)
                    {
                        if (assembly.IsPreRequisite && IsNetFX35SP1ClientSignatureAsm(assembly.Identity))
                        {
                            flag3 = true;
                        }
                        if (assembly.IsPreRequisite && IsNetFX35SP1FullSignatureAsm(assembly.Identity))
                        {
                            flag4 = true;
                        }
                    }
                    if (((GetPlatformNetFx35SKU(assemblyCache, fetchRuntimeHost, host, tempDir) == NetFX35SP1SKU.Client35SP1) && !flag3) && !flag4)
                    {
                        description = ".NET Framework 3.5 SP1";
                        throw new DependentPlatformMissingException(string.Format(CultureInfo.CurrentUICulture, Resources.GetString("ErrorMessage_PlatformDetectionFailed"), new object[] { description }));
                    }
                }
                foreach (DependentAssembly assembly2 in appManifest.DependentAssemblies)
                {
                    if (assembly2.IsPreRequisite && !IsCLRDependencyText(assembly2.Identity.Name))
                    {
                        if (!fetchRuntimeHost && ((IsNetFX35SP1ClientSignatureAsm(assembly2.Identity) || IsNetFX35SP1FullSignatureAsm(assembly2.Identity)) || "framework".Equals(assembly2.Group, StringComparison.OrdinalIgnoreCase)))
                        {
                            Logger.AddPhaseInformation(Resources.GetString("SkippingSentinalDependentAssembly"), new object[] { assembly2.Identity.ToString() });
                        }
                        else if (!VerifyGACDependency(assemblyCache, fetchRuntimeHost, host, assembly2.Identity, tempDir))
                        {
                            if (assembly2.Description != null)
                            {
                                description = assembly2.Description;
                            }
                            else
                            {
                                ReferenceIdentity identity = assembly2.Identity;
                                StringBuilder     builder4 = new StringBuilder();
                                builder4.AppendFormat(Resources.GetString("PlatformDependentAssemblyVersion"), identity.Name, identity.Version);
                                description = builder4.ToString();
                            }
                            if (assembly2.SupportUrl != null)
                            {
                                supportUri = assembly2.SupportUrl;
                            }
                            throw new DependentPlatformMissingException(string.Format(CultureInfo.CurrentUICulture, Resources.GetString("ErrorMessage_PlatformGACDetectionFailed"), new object[] { description }), supportUri);
                        }
                    }
                }
            }
        }
Example #2
0
 public static bool VerifyGACDependency(System.Deployment.Application.NativeMethods.IAssemblyCache AssemblyCache, bool targetOtherClr, System.Deployment.Application.NativeMethods.CCorRuntimeHost RuntimeHost, ReferenceIdentity refId, string tempDir)
 {
     if (string.Compare(refId.ProcessorArchitecture, "msil", StringComparison.OrdinalIgnoreCase) == 0)
     {
         return(VerifyGACDependencyWhidbey(AssemblyCache, targetOtherClr, RuntimeHost, refId));
     }
     if (!VerifyGACDependencyXP(refId, tempDir))
     {
         return(VerifyGACDependencyWhidbey(AssemblyCache, targetOtherClr, RuntimeHost, refId));
     }
     return(true);
 }
Example #3
0
        public static bool VerifyGACDependencyWhidbey(System.Deployment.Application.NativeMethods.IAssemblyCache AssemblyCache, bool targetOtherClr, System.Deployment.Application.NativeMethods.CCorRuntimeHost RuntimeHost, ReferenceIdentity refId)
        {
            ReferenceIdentity identity;

            System.Deployment.Application.NativeMethods.IAssemblyName name;
            System.Deployment.Application.NativeMethods.IAssemblyEnum enum2;
            string str  = refId.ToString();
            string text = null;

            if (targetOtherClr)
            {
                try
                {
                    text = RuntimeHost.ApplyPolicyInOtherRuntime(str);
                    goto Label_0048;
                }
                catch (ArgumentException)
                {
                    return(false);
                }
                catch (COMException)
                {
                    return(false);
                }
            }
            try
            {
                text = AppDomain.CurrentDomain.ApplyPolicy(str);
            }
            catch (ArgumentException)
            {
                return(false);
            }
            catch (COMException)
            {
                return(false);
            }
Label_0048:
            identity = new ReferenceIdentity(text);
            identity.ProcessorArchitecture = refId.ProcessorArchitecture;
            string assemblyName = identity.ToString();

            Logger.AddPhaseInformation(Resources.GetString("DetectingDependentAssembly"), new object[] { str, assemblyName });
            SystemUtils.AssemblyInfo info = null;
            info = SystemUtils.QueryAssemblyInfo(AssemblyCache, SystemUtils.QueryAssemblyInfoFlags.All, assemblyName);
            if ((info != null) || (identity.ProcessorArchitecture != null))
            {
                return(info != null);
            }
            System.Deployment.Application.NativeMethods.CreateAssemblyNameObject(out name, identity.ToString(), 1, IntPtr.Zero);
            System.Deployment.Application.NativeMethods.CreateAssemblyEnum(out enum2, null, name, 2, IntPtr.Zero);
            return(enum2.GetNextAssembly(null, out name, 0) == 0);
        }
Example #4
0
        private static NetFX35SP1SKU GetPlatformNetFx35SKU(System.Deployment.Application.NativeMethods.IAssemblyCache AssemblyCache, bool targetOtherCLR, System.Deployment.Application.NativeMethods.CCorRuntimeHost RuntimeHost, string tempDir)
        {
            ReferenceIdentity refId     = new ReferenceIdentity("Sentinel.v3.5Client, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,processorArchitecture=msil");
            ReferenceIdentity identity2 = new ReferenceIdentity("System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089,processorArchitecture=msil");
            bool flag  = false;
            bool flag2 = false;

            if (VerifyGACDependency(AssemblyCache, targetOtherCLR, RuntimeHost, refId, tempDir))
            {
                flag = true;
            }
            if (VerifyGACDependency(AssemblyCache, targetOtherCLR, RuntimeHost, identity2, tempDir))
            {
                flag2 = true;
            }
            if (flag && !flag2)
            {
                return(NetFX35SP1SKU.Client35SP1);
            }
            if (flag && flag2)
            {
                return(NetFX35SP1SKU.Full35SP1);
            }
            return(NetFX35SP1SKU.No35SP1);
        }