Как узнать, установлен ли .NET 3.5 SP1?

Ответы:

18

Используйте «Установка и удаление программ» из Панели управления.

рп.
источник
1
Иди разберись. Позже я подумал, что упустил «программный» момент в вашем вопросе, Гай.
рп.
135

Посмотри на HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5\. Одно из них должно быть правдой:

  • VersionЗначение этого ключа должно быть 3.5.30729.01
  • Или SPзначение в том же ключе должно быть 1

В C # (взято из первого комментария) вы можете сделать что-то в этом роде:

const string name = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5";
RegistryKey subKey = Registry.LocalMachine.OpenSubKey(name);
var version = subKey.GetValue("Version").ToString();
var servicePack = subKey.GetValue("SP").ToString();
Рэй
источник
8
const string name = @ "SOFTWARE \ Microsoft \ NET Framework Setup \ NDP \ v3.5"; RegistryKey subKey = Registry.LocalMachine.OpenSubKey (имя); var version = subKey.GetValue ("Версия"). ToString (); var servicePack = subKey.GetValue ("SP"). ToString ();
Крис Крафт,
2
На моей машине Versionесть 3.5.30729.5420и SPесть1
Кевин Смит
2
В командной строке: reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" /V Version reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" /V SP
Кевин Смит
Возникнет проблема: если у пользователя не установлен .NET, как ваша программа, написанная с .NET, запускается, чтобы определить, установлен ли .NET?
zwcloud
27

Вы можете перейти на SmallestDotNet, используя IE с сервера. Это сообщит вам версию, а также предоставит ссылку для загрузки, если вы устарели.

Энди Мэй
источник
4
Сообщает вам только самую высокую версию, например, если у вас 4, она не скажет вам, есть ли у вас также 3.5 sp 1
codeulike
12

Я пришел на эту страницу, пытаясь понять, как определить версии фреймворка, установленные на сервере без доступа к удаленному рабочему столу или реестру, поэтому ответ Дэнни В.

string path = System.Environment.SystemDirectory;
path = path.Substring( 0, path.LastIndexOf('\\') );
path = Path.Combine( path, "Microsoft.NET" );
// C:\WINDOWS\Microsoft.NET\

string[] versions = new string[]{
    "Framework\\v1.0.3705",
    "Framework64\\v1.0.3705",
    "Framework\\v1.1.4322",
    "Framework64\\v1.1.4322",
    "Framework\\v2.0.50727",
    "Framework64\\v2.0.50727",
    "Framework\\v3.0",
    "Framework64\\v3.0",
    "Framework\\v3.5",
    "Framework64\\v3.5",
    "Framework\\v3.5\\Microsoft .NET Framework 3.5 SP1",
    "Framework64\\v3.5\\Microsoft .NET Framework 3.5 SP1",
    "Framework\\v4.0",
    "Framework64\\v4.0"
};

foreach( string version in versions )
{
    string versionPath = Path.Combine( path, version );

    DirectoryInfo dir = new DirectoryInfo( versionPath );
    if( dir.Exists )
    {
        Response.Output.Write( "{0}<br/>", version );
    }
}
Мэтт
источник
Сработало как положено у меня. Просто создал новый проект веб-сайта, добавил код и разместил его в общей папке, а затем запросил страницу.
Крис ван дер Маст
9

Взгляните на эту статью, в которой показаны ключи реестра, которые вам нужно искать, и предоставлена ​​библиотека .NET, которая сделает это за вас.

Во-первых, вы должны определить, установлена ​​ли .NET 3.5, посмотрев на HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v3.5 \ Install, который является значением DWORD. Если это значение присутствует и установлено на 1, то эта версия Framework установлена.

Посмотрите на HKLM \ Software \ Microsoft \ NET Framework Setup \ NDP \ v3.5 \ SP, который представляет собой значение DWORD, которое указывает уровень пакета обновления (где 0 - это отсутствие пакета обновления).

Чтобы быть точным, вам действительно нужно сначала установить .NET Fx 2.0 и .NET Fx 3.0, а затем проверить, установлен ли .NET 3.5. Если все три верны, вы можете проверить уровень пакета обновления.

Скотт Дорман
источник
1
ссылка на статью изменена, вот это новое местоположение: codeproject.com/KB/dotnet/frameworkversiondetection.aspx
Drake
5

Проверьте, существует ли следующий каталог:

На 64-битных машинах:% SYSTEMROOT% \ Microsoft.NET \ Framework64 \ v3.5 \ Microsoft .NET Framework 3.5 SP1 \

На 32-битных машинах:% SYSTEMROOT% \ Microsoft.NET \ Framework \ v3.5 \ Microsoft .NET Framework 3.5 SP1 \

Где% SYSTEMROOT% - это переменная среды SYSTEMROOT (например, C: \ Windows).

Дэнни Варод
источник
2

Предполагая, что везде присутствует имя «Microsoft .NET Framework 3.5 SP1», вы можете использовать это:

string uninstallKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(uninstallKey))
{
    return rk.GetSubKeyNames().Contains("Microsoft .NET Framework 3.5 SP1");
}
Панос
источник
+1, это пока самый простой способ программно проверить, установлен ли 3.5 SP1 - на самом деле, если это сработало. Пробовал, у меня не работает, всегда возвращает false.
Евгений Березовский
Просматривая коллекцию, возвращаемую GetSubKeyNames (), для некоторых продуктов используется простое текстовое имя, для некоторых - например, фреймворков .net, используются идентификаторы продуктов {1ea1f -...}. Вот почему его нельзя найти.
Евгений Березовский