Можно ли узнать, установлен ли .NET Framework из приложения .NET?

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

Это нормально? Если это так... есть ли способ проверить, может ли .NET framework изящно завершить работу?


person Jorge Córdoba    schedule 27.02.2009    source источник
comment
Более важный вопрос: на каких машинах не установлен .NET?   -  person leppie    schedule 27.02.2009
comment
Ранее спрашивали: stackoverflow.com/questions/558184/   -  person mmx    schedule 27.02.2009
comment
Как этот вопрос связан с этим? Я спрашивал, как проверить во время выполнения, если .NET установлен, другой спрашивал, какие версии .net framework предустановлены на какой ОС.   -  person Jorge Córdoba    schedule 28.02.2009


Ответы (5)


Вы не можете проверить номер версии платформы .NET с помощью управляемого кода, поскольку он не может быть выполнен до загрузки среды выполнения .NET. Для этого можно использовать CLR Unmanaged API, но лучший способ решить эту проблему — предоставить механизм установки, который проверяет, загружает и устанавливает .NET Framework, если он не установлен на компьютере.

person mmx    schedule 27.02.2009

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

person Steven Robbins    schedule 27.02.2009

Взгляните на профиль клиента .NET Framework (http://msdn.microsoft.com/en-us/library/cc656912.aspx):

Клиентский профиль .NET Framework предоставляет стандартную настройку загрузчика, которую можно использовать для клиентских приложений. Это гарантирует, что все требования для запуска вашего приложения будут установлены, независимо от того, какая версия .NET Framework присутствует. Процесс установки обеспечивает согласованный пользовательский интерфейс (UI) и простую установку, независимо от того, является ли целевая операционная система Windows XP или Windows Vista.

person Guido Domenici    schedule 27.02.2009

Я полагаю, вы должны сделать эту проверку в сценарии установки.

person Bharani    schedule 27.02.2009

Если он упакован в установщик, вы можете установить условия установки для проверки .NET и версии фреймворка.

Другой способ проверить структуру:

System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory;
System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion;

Из кулинарной книги О'Рейли.

Но оба они терпят поражение из-за того, что .NET должен быть установлен до того, как код сможет даже начать проверку.

person Joe Chin    schedule 27.02.2009