Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
894
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Лучший Способ Определить, Установлен Ли .NET 3.5
Мне нужно программно определить, установлен ли .NET 3.5. Я думал, что это будет легко:
<% Response.Write(Environment.Version.ToString()); %>
Который возвращает "2.0.50727.1434", так что нет такой удачи...
В своем исследовании я обнаружил, что есть некоторые довольно неясные ключи реестра, которые я могу посмотреть, но я не уверен, что это тот путь, по которому нужно идти. У кого-нибудь есть какие-нибудь предложения?
Это связано с тем, что технически .NET 3.5 является расширением структуры 2.0. Самый быстрый способ-включить assembly из .NET 3.5 и посмотреть, не сломается ли он.
System.Web.Extensions
Это хороший assembly, который входит только в версию 3.5. Также кажется, что вы используете ASP.NET для запуска этой проверки, это действительно ограничивает вас, потому что вы не сможете проверить файловую систему или реестр, работающий в защищенном режиме ASP.NET. Или вы всегда можете проблематично попробовать загрузить assembly из GAC, который должен быть только в .NET 3.5, однако вы можете снова столкнуться с проблемами с разрешениями.
Это может быть один из тех случаев, когда вы спрашиваете себя "What am I trying to accomplish?" и смотрите, есть ли альтернативные маршруты.
Вы могли бы попробовать:
static bool HasNet35()
{
try
{
AppDomain.CurrentDomain.Load(
"System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
return true;
}
catch
{
return false;
}
}
@ Nick : хороший вопрос, я попробую его немного позже.
Килоэлектронвольт
Хороший ресурс я нашел:
http://www.walkernews.net/2008/05/16/how-to-check-net-framework-version-installed/
@Kev, очень нравится ваше решение. Спасибо за помощь.
Используя реестр код будет выглядеть примерно так:
RegistryKey key = Registry
.LocalMachine
.OpenSubKey("Software\\Microsoft\\NET Framework Setup\\NDP\\v3.5");
return (key != null);
Мне было бы любопытно, если бы любой из них работал в среде среднего доверия (хотя я работаю в полном доверии, поэтому не имеет значения, над чем я сейчас работаю).
Если вы хотите, чтобы была установлена конкретная версия .net и могли контролировать распространение вашего приложения, вам действительно следует использовать ClickOnce . Он позволяет вам указать минимальную требуемую версию фреймворка .Net, которая должна быть установлена, и он будет проверять только тогда, когда он устанавливается, чтобы все ваши последующие запуски не затруднялись ненужной проверкой.
Кроме того, с ClickOnce вы получаете обновление бесплатно. Почему бы кому-то не захотеть им воспользоваться?
Чтобы настроить приложение ClickOnce, просто щелкните правой кнопкой мыши проект в Visual Studio и перейдите к параметрам публикации. Это позволит создать специальную сборку вашего приложения, которую вы можете разместить на своем веб-сайте. Когда пользователи загружают программу, установщик проверяет наличие каких-либо предварительных условий, таких как .Net для вас.
@komradekatz, ваше решение ниже от MSDN для удобства других людей, изучающих это. Мне не нравится это решение, потому что оно использует пользовательский агент для определения версии. Это не подходит для того, что мне нужно (я пишу библиотеку классов, которая должна знать, установлен ли .NET 3.5). Я также задаюсь вопросом, насколько надежным может оказаться это решение.
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<HTML>
<HEAD>
<TITLE>Test for the .NET Framework 3.5</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8" />
<SCRIPT LANGUAGE="JavaScript">
<!--
var dotNETRuntimeVersion = "3.5.0.0";
function window::onload()
{
if (HasRuntimeVersion(dotNETRuntimeVersion))
{
result.innerText =
"This machine has the correct version of the .NET Framework 3.5."
}
else
{
result.innerText =
"This machine does not have the correct version of the .NET Framework 3.5." +
" The required version is v" + dotNETRuntimeVersion + ".";
}
result.innerText += "\n\nThis machine's userAgent string is: " +
navigator.userAgent + ".";
}
//
// Retrieve the version from the user agent string and
// compare with the specified version.
//
function HasRuntimeVersion(versionToCheck)
{
var userAgentString =
navigator.userAgent.match(/.NET CLR [0-9.]+/g);
if (userAgentString != null)
{
var i;
for (i = 0; i < userAgentString.length; ++i)
{
if (CompareVersions(GetVersion(versionToCheck),
GetVersion(userAgentString[i])) <= 0)
return true;
}
}
return false;
}
//
// Extract the numeric part of the version string.
//
function GetVersion(versionString)
{
var numericString =
versionString.match(/([0-9]+)\.([0-9]+)\.([0-9]+)/i);
return numericString.slice(1);
}
//
// Compare the 2 version strings by converting them to numeric format.
//
function CompareVersions(version1, version2)
{
for (i = 0; i < version1.length; ++i)
{
var number1 = new Number(version1[i]);
var number2 = new Number(version2[i]);
if (number1 < number2)
return -1;
if (number1 > number2)
return 1;
}
return 0;
}
-->
</SCRIPT>
</HEAD>
<BODY>
<div id="result" />
</BODY>
</HTML>
На моей машине это выходы:
Эта машина имеет правильную версию из .NET рамок 3.5.
Строка userAgent этой машины является: Mozilla/4.0 (совместимый; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; InfoPath.2; .NET CLR 1.1.4322; .NET CLR 3.5.21022; Зуне 2.5).
Без каких-либо исключений загрузки и перехвата assembly (что происходит медленно) проверьте наличие изменений класса API между 2.0 и 3.5. Mono статус класса очень полезен для этого. Например, вы можете проверить наличие GC.Collect Method (Int32, GCCollectionMode) , который находится в mscorlib и был добавлен в 3.5 .