Como detectar de forma fiável o actual.NET versão 4.5 instalada?

o meu verdadeiro problema é que encontrei duas versões do. NET 4.5 setups completos:

  • Um (possivelmente) antigo, que também está disponível ao descarregar as ferramentas de dados do servidor SQL
    • Tamanho: 50,349,920
    • md5: a5e81d1b3905ada0a6e35fd6c6a2e1f4
  • Um (possivelmente) novo baixado esta manhã daqui. http://www.microsoft.com/visualstudio/eng/downloads
    • Tamanho: 50,352,408
    • md5: d02dc8b69a702a47c083278938c4d2f1

a versão para ambas as configurações são 4.5.50709.17929. Dentro, a principal diferença é o arquivo netfx_Full.mzz, mas depois de extrair o conteúdo com 7-zip eu acabo com um monte de arquivos com a mesma versão, mesmo se o conteúdo do arquivo é diferente (eu verifiquei cerca de 20 arquivos aleatórios de cerca de 426), então eu não posso realmente dizer qual é mais recente.

existe uma maneira de detectar de forma fiável a versão real do tempo de execução do. NET 4. 5 instalado, para que eu possa executar a configuração apenas se for realmente necessário?

actualizar

ter verificado todos os 426 arquivos que têm conteúdo diferente, e todos eles estão tendo o mesmo ProductVersion e Fileverion em ambos os setups. Então, o registro ou checksums de arquivos são o próximo passo.

actualizar 2

a versão indicada no registo é a mesma para ambas as configurações.: 4.5.50709

actualizar 3

.NET 4.5.2 está agora disponível:

esta versão do Framework. NET é executada lado a lado com o Framework. net 3.5 SP1 e versões anteriores, mas executa uma atualização no local para o.NET Framework 4, .net Framework 4.5 e .net Framework 4.5.1.

Author: alexandrul, 2012-10-19

4 answers

MS recentemente corrigida .NET 4.5 para restaurar a compatibilidade com versões anteriores .NET 4.0 em alguns cenários (ver http://blogs.msdn.com/b/dotnet/archive/2012/10/17/net-framework-4-5-off-to-a-great-start.aspx).

É possível que o MS tenha atualizado a configuração com estas alterações (para que os usuários atualizando para o.NET 4.5 não tenham problemas com o compat), embora eu não saiba por que eles não mudariam o número da versão na configuração.

Além disso, note que há uma diferença entre o .NET número da versão e número da versão em tempo de execução, conforme indicado por System.Environment.Version. O último ainda é 4.0.30319.* para. NET 4.5, apenas o número de revisão muda (com a atualização.net 4.5, e também com cada atualização de segurança).

Aqui estão alguns exemplos de versões em tempo de execução observadas na natureza:

Base 4.0

  • 4, 0, 30319, 1=. NET 4, 0 RTM
  • 4.0.30319.269 =. net 4.0 no Windows XP SP3, 7, 7 SP1 (com MS12-035 update)
  • 4. 0. 30319. 276=. net 4. 0 no Windows XP SP3 (4. 0. 3 Actualização de tempo de execução)
  • 4.0.30319.296 =. net 4.0 no Windows XP SP3, 7 (com MS12-074 actualização da segurança da RDA)
  • 4. 0. 30319. 544 =. net 4. 0 no Windows XP SP3, 7, 7 SP1 (com MS12-035 LDR actualização de segurança)
  • 4.0.30319.1008 =. net 4.0 no Windows XP SP3, 7, 7 SP1 (com MS13-052 actualização de segurança da RDA)
  • 4. 0. 30319. 1022 =. net 4. 0 no Windows XP SP3, 7, 7 SP1 (com MS14-009 actualização da segurança da RDA]
  • 4.0.30319.1026=. net 4.0 no Windows XP SP3, 7, 7 SP1 (com MS14-057 actualização de segurança da RDA)
  • 4.0.30319.2034 = .NET 4.0 no Windows XP SP3, 7, 7 SP1 (com MS14-009 LDR actualização de segurança)

4.5

  • 4, 0, 30319, 17626=. NET 4, 5 RC
  • 4, 0, 30319, 17929=. NET 4, 5 RTM
  • 4. 0. 30319. 18010=. net 4. 5 no Windows 8
  • 4.0.30319.18052 =. net 4.5 no Windows 7 SP1 64-bit
  • 4. 0. 30319. 18063 =. net 4. 5 no Windows 7 SP1 64-bit (com MS14-009 actualização de segurança)

4.5.1

  • 4, 0, 30319, 18408=. net 4, 5, 1 no Windows 7 SP1 64-bit
  • 4. 0. 30319. 1844=. net 4. 5. 1 no Windows 7 SP1 64-bit (com MS14-009 actualização de segurança)
  • 4, 0, 30319, 34014=. net 4, 5, 1 no Windows 8, 1 64-bit

4.5.2

  • 4.0.30319.34209 =. net 4.5.2 no Windows 7 SP1 64-bit
  • 4, 0, 30319, 34209=. net 4, 5.2 no Windows 8, 1 64-bit

4.6 e mais tarde

  • 4.0.30319.42000

Não vejo nenhuma actualização. NET no Meu Histórico de actualizações do Windows, por isso, acho que a actualização do v18010 foi instalada como parte de KB 2756872.

Actualização: aparentemente a Microsoft actualizou a configuração do.NET 4.5 devido a um erro com as assinaturas digitais no download original. KB 2770445 .

 103
Author: Daniel, 2017-05-25 04:20:44
public class DA {
    public static class VersionNetFramework {
        public static string Get45or451FromRegistry()
        {//https://msdn.microsoft.com/en-us/library/hh925568(v=vs.110).aspx
            using (RegistryKey ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey("SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full\\"))
            {
                int releaseKey = Convert.ToInt32(ndpKey.GetValue("Release"));
                if (true)
                {
                    return (@"Version: " + CheckFor45DotVersion(releaseKey));
                }
            }
        }
        // Checking the version using >= will enable forward compatibility, 
        // however you should always compile your code on newer versions of
        // the framework to ensure your app works the same.
        private static string CheckFor45DotVersion(int releaseKey)
        {//https://msdn.microsoft.com/en-us/library/hh925568(v=vs.110).aspx
            if (releaseKey >= 394271)
                return "4.6.1 installed on all other Windows OS versions or later";
            if (releaseKey >= 394254)
                return "4.6.1 installed on Windows 10 or later";
            if (releaseKey >= 393297)
                return "4.6 installed on all other Windows OS versions or later";
            if (releaseKey >= 393295)
                return "4.6 installed with Windows 10 or later";
            if (releaseKey >= 379893)
                return "4.5.2 or later";
            if (releaseKey >= 378758)
                return "4.5.1 installed on Windows 8, Windows 7 SP1, or Windows Vista SP2 or later";
            if (releaseKey >= 378675)
                return "4.5.1 installed with Windows 8.1 or later";
            if (releaseKey >= 378389)
                return "4.5 or later";

            return "No 4.5 or later version detected";
        }
        public static string GetVersionFromRegistry()
        {//https://msdn.microsoft.com/en-us/library/hh925568(v=vs.110).aspx
            string res = @"";
            // Opens the registry key for the .NET Framework entry.
            using (RegistryKey ndpKey =
                RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, "").
                OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\"))
            {
                // As an alternative, if you know the computers you will query are running .NET Framework 4.5 
                // or later, you can use:
                // using (RegistryKey ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, 
                // RegistryView.Registry32).OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\"))
                foreach (string versionKeyName in ndpKey.GetSubKeyNames())
                {
                    if (versionKeyName.StartsWith("v"))
                    {

                        RegistryKey versionKey = ndpKey.OpenSubKey(versionKeyName);
                        string name = (string)versionKey.GetValue("Version", "");
                        string sp = versionKey.GetValue("SP", "").ToString();
                        string install = versionKey.GetValue("Install", "").ToString();
                        if (install == "") //no install info, must be later.
                            res += (versionKeyName + "  " + name) + Environment.NewLine;
                        else
                        {
                            if (sp != "" && install == "1")
                            {
                                res += (versionKeyName + "  " + name + "  SP" + sp) + Environment.NewLine;
                            }

                        }
                        if (name != "")
                        {
                            continue;
                        }
                        foreach (string subKeyName in versionKey.GetSubKeyNames())
                        {
                            RegistryKey subKey = versionKey.OpenSubKey(subKeyName);
                            name = (string)subKey.GetValue("Version", "");
                            if (name != "")
                                sp = subKey.GetValue("SP", "").ToString();
                            install = subKey.GetValue("Install", "").ToString();
                            if (install == "") //no install info, must be later.
                                res += (versionKeyName + "  " + name) + Environment.NewLine;
                            else
                            {
                                if (sp != "" && install == "1")
                                {
                                    res += ("  " + subKeyName + "  " + name + "  SP" + sp) + Environment.NewLine;
                                }
                                else if (install == "1")
                                {
                                    res += ("  " + subKeyName + "  " + name) + Environment.NewLine;
                                }
                            }
                        }
                    }
                }
            }
            return res;
        }
        public static string GetUpdateHistory()
        {//https://msdn.microsoft.com/en-us/library/hh925567(v=vs.110).aspx
            string res=@"";
            using (RegistryKey baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(@"SOFTWARE\Microsoft\Updates"))
            {
                foreach (string baseKeyName in baseKey.GetSubKeyNames())
                {
                    if (baseKeyName.Contains(".NET Framework") || baseKeyName.StartsWith("KB") || baseKeyName.Contains(".NETFramework"))
                    {

                        using (RegistryKey updateKey = baseKey.OpenSubKey(baseKeyName))
                        {
                            string name = (string)updateKey.GetValue("PackageName", "");
                            res += baseKeyName + "  " + name + Environment.NewLine;
                            foreach (string kbKeyName in updateKey.GetSubKeyNames())
                            {
                                using (RegistryKey kbKey = updateKey.OpenSubKey(kbKeyName))
                                {
                                    name = (string)kbKey.GetValue("PackageName", "");
                                    res += ("  " + kbKeyName + "  " + name) + Environment.NewLine;

                                    if (kbKey.SubKeyCount > 0)
                                    {
                                        foreach (string sbKeyName in kbKey.GetSubKeyNames())
                                        {
                                            using (RegistryKey sbSubKey = kbKey.OpenSubKey(sbKeyName))
                                            {
                                                name = (string)sbSubKey.GetValue("PackageName", "");
                                                if (name == "")
                                                    name = (string)sbSubKey.GetValue("Description", "");
                                                res += ("    " + sbKeyName + "  " + name) + Environment.NewLine;
                                            }
                                        }
                                    }
                                }
                            }
                        }

                    }
                }
            }
            return res;
        }
    }
}
 2
Author: D.A.R.T.S., 2015-12-05 08:36:18

Você pode sempre ir ao Windows / Microsoft. net/Framework / 4.0.30319 e olhar para o sistema.ficheiro dll...clique com o botão direito Propriedades e veja go to details..devia mostrar-te a versão... Sistema.dll para 4.5.2

 1
Author: Dane, 2016-02-09 17:34:39

Se alguém precisar do valor System.Environment.Version contra a versão. net, organizado numa tabela (necessidade de executar =Vlookup com o excel, etc...)
eis um mergulhador que criei para isso.
indique a ligação acima e poderá copiar a imagem desta tabela:

enter image description here

 1
Author: jonathana, 2017-12-17 08:55:26