- Detect Windows version in .net
- 15 Answers 15
- First solution
- Alternative solution
- Microsoft Visual C++ Runtime Library
- Причины возникновения ошибки
- 1. Запуск от имени администратора и в режиме совместимости
- 2. Ошибка из-за некорректного имени учетной записи
- 3. Переустановка приложения (игры, программы)
- 4. Переустановка Microsoft Visual C++
- 5. Переустановка net. Framework
- 6. Переустановка DirectX
- 7. Драйвера на видеокарту
- 8. Неверно выставленное время
- Как исправить ошибку на Windows 10
- Заключение
- Detect package identity and runtime context
- Use GetCurrentPackageFullName in native code
- Use GetCurrentPackageFullName function in managed code
- Скачать RuntimePack v.20.3.3 для Windows
Detect Windows version in .net
How can I detect the Windows OS versions in .net?
What code can I use?
15 Answers 15
System.Environment.OSVersion has the information you need for distinguishing most Windows OS major releases, but not all. It consists of three components which map to the following Windows versions:
For a library that allows you to get a more complete view of the exact release of Windows that the current execution environment is running in, check out this library.
Important note: if your executable assembly manifest doesn’t explicitly state that your exe assembly is compatible with Windows 8.1 and Windows 10.0, System.Environment.OSVersion will return Windows 8 version, which is 6.2, instead of 6.3 and 10.0! Source: here.
I used this when I had to determine various Microsoft Operating System versions:
I use the ManagementObjectSearcher of namespace System.Management
Do not forget to add the reference to the Assembly System.Management.dll and put the using: using System.Management;
Result:
Like R. Bemrose suggested, if you are doing Windows 7 specific features, you should look at the Windows® API Code Pack for Microsoft® .NET Framework.
It contains a CoreHelpers class that let you determine the OS you are currently on (XP and above only, its a requirement for .NET nowaday)
It also provide multiple helper methods. For example, suppose that you want to use the jump list of Windows 7, there is a class TaskbarManager that provide a property called IsPlatformSupported and it will return true if you are on Windows 7 and above.
You can use this helper class;
Sample code is here:
This is a relatively old question but I’ve recently had to solve this problem and didn’t see my solution posted anywhere.
The easiest (and simplest way in my opinion) is to just use a pinvoke call to RtlGetVersion
Where Major and Minor version numbers in this struct correspond to the values in the table of the accepted answer.
This returns the correct Windows version number unlike the deprecated GetVersion & GetVersionEx functions from kernel32
Via Environment.OSVersion which «Gets an System.OperatingSystem object that contains the current platform identifier and version number.»
These all seem like very complicated answers for a very simple function:
Detect OS Version:
Then simply do wrap a select case around the function.
- Add reference to Microsoft.VisualBasic .
- Include namespace using Microsoft.VisualBasic.Devices ;
- Use new ComputerInfo().OSFullName
The return value is «Microsoft Windows 10 Enterprise»
The above answers would give me Major version 6 on Windows 10.
The solution that I have found to work without adding extra VB libraries was following:
I wouldn’t consider this the best way to get the version, but the upside this is oneliner no extra libraries, and in my case checking if it contains «10» was good enough.
How about using a Registry to get the name.
«HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion» has a value ProductName since Windows XP.
If you are using .NET Framework 4.0 or above. You can remove the Is64BitOperatingSystem() method and use Environment.Is64BitOperatingSystem.
First solution
To make sure you get the right version with Environment.OSVersion you should add an app.manifest using Visual Studio and uncomment following supportedOS tags:
Then in your code you can use Environment.OSVersion like this:
Example
For instance in my machine ( Windows 10.0 Build 18362.476 ) result would be like this which is incorrect:
By adding app.manifest and uncomment those tags I will get the right version number:
Alternative solution
If you don’t like adding app.manifest to your project, you can use OSDescription which is available since .NET Framework 4.7.1 and .NET Core 1.0.
Note: Don’t forget to add following using statement at top of your file.
You can read more about it and supported platforms here.
Microsoft Visual C++ Runtime Library
Ошибка Microsoft Visual C++ Runtime Library Error возникает при запуске программ и игр на ОС Windows самых разных версий. Однозначно сказать, что приводит к появлению неполадки, невозможно. Пакет Microsoft Visual C++ является сложной интегрированной системой, поэтому рассмотрим все варианты решений, накопленные опытным путем. Каждый метод помогает в определенных случаях, и есть продуктом синтеза знаний и опыта, которые были структурированы и переработаны в статью. Цель ее – дать инструкции по исправлению ошибки. Мы надеемся, что информация принесет пользу и поможет решить вашу проблему.
Причины возникновения ошибки
Однозначно назвать причину нельзя из-за сложного процесса запуска приложений, в котором участвуют различные службы и программы. Поэтому рекомендуем пробовать на практике каждый из приведенных методов, и не тратить время на выяснение причины. Это будет намного действеннее и быстрее. Давайте разберемся как исправить ошибку с помощью различных способов
1. Запуск от имени администратора и в режиме совместимости
Если игра выпущена давно и не запускается, то рассматриваемая ошибка может свидетельствовать о несовместимости программных комплексов новой версии со старой версией. Поэтому запуск от лица администратора и в режиме совместимости может решить проблему быстро и безболезненно.
- Правой кнопкой мыши на ярлык с игрой.
- Кликнуть на строчку, показанную на скриншоте.
- Подтвердить действие.
- Дождаться запуска.
- Правой кнопкой на ярлык приложения.
- Клик на строчку «Свойства».
- В окне выбрать раздел «Совместимость».
- Поставить галочку, как на картинке.
- В строке выбора ОС указать вашу текущую версию.
- Нажать «Применить» и «ОК».
- Запустить приложение.
2. Ошибка из-за некорректного имени учетной записи
С помощью этого метода ошибка исправляется просто и быстро. Причина в этом случае кроется в имени учетной записи. Если она на кириллице (русский язык), возникает ошибка такого рода. Нужно просто создать дополнительную запись на латинице (английский). Для этого:
- «Панель управления».
- «Учетные записи и Семейная безопасность».
- «Учетные записи пользователей».
- «Управление другой учетной записью».
- В новой вкладке окна добавляем нового пользователя с именем на английском языке.
- Перейти в новую учетную запись.
- Запустить приложение.
Иногда помогает переименовать каталог с кириллицы на латынь. Например с C:\Игры на C:\Games
3. Переустановка приложения (игры, программы)
При установке могли возникнуть проблемы, и она была завершена не совсем корректно. Сами установочные файлы приложения могут иметь ошибки, которые проявляются при запуске таким вот образом.
Переустановить игру, полностью удалив ее с компьютера, и еще лучше, если она будет скачана из другого источника, а после установлена заново. Алгоритм действий следующий:
- Зайти в «Пуск».
- «Панель управления».
- «Программы и компоненты».
- Найти и удалить проблемное приложение.
- Скачать его из другого источника.
- Установить.
- Запустить.
4. Переустановка Microsoft Visual C++
Программы и игры для Windows разрабатываются в специальной среде с использованием уникальной программной платформы. Ошибки в файлах и той, и другой могут повлечь за собой неполадки при запуске приложений в ОС Windows. Не будем углубляться в дебри программирования, а сразу перейдем к исправлению.
Дефект устраняется при помощи обновления и переустановки программного комплекса. Предпочтительнее полностью переустановить Visual C++. Перед этим следует удалить все установленные пакеты. Для этого зайти в «Программы и компоненты» и далее по списку:
- Найти Microsoft Visual C++.
- Удалить.
- Скачать Microsoft Visual C++, исходя из разрядности вашей операционной системы (х86 для 32-разрядной, х64 для 64-разрядной);
- Установить;
- Перезагрузить компьютер;
- Запустить проблемное приложение;
5. Переустановка net. Framework
Он также исполняет особую роль при запуске, поэтому проделаем те же действия, что и с Visual C++. Удалению, скачиванию и установке теперь подлежит net. Framework
6. Переустановка DirectX
Наравне с вышеуказанными платформами программа также участвует в запуске и работе приложений. Переустановка решит проблему, если она заключена в ней.
- Скачать DirectX
- Установить и перезагрузиться.
- Запустить неработающее приложение.
7. Драйвера на видеокарту
Устаревшая версия драйвера на видеокарту или ошибки, которые иногда возникают в работе драйверов, могут приводить к последствиям в виде ошибок. Рекомендуется удалить драйвера через «Программы и компоненты» и повторно скачать, установить свежую версию с сайта производителя видеокарты. Далее, выполнить перезагрузку и запуск приложения, с которым связаны проблемы.
8. Неверно выставленное время
Большинство приложений имеет ограниченное производителем время работы, поэтому неправильно выставленные часы могут послужить причиной сбоев и отказов в работе части программ. Рекомендуется выставить на устройстве актуальное время, перезагрузить его и запустить приложение заново.
Как исправить ошибку на Windows 10
Способ работает исключительно на Виндовс 10, поэтому рассматриваем его отдельно от остальных. Суть в том, что эта версия ОС может запрещать автоматическое обновление некоторых служб, в частности Visual C++ и net.Framework. После включения этой возможности, Windows обновит эти программы и после перезагрузки следует повторить запуск. Порядок действий:
- Программы и компоненты.
- Включение и отключение компонентов Windows.
- В окне поставить галочки напротив служб, где стоит черный квадрат, как на картинке.
- Подождать окончания автообновления.
- Перезагрузиться.
- Запустить приложение.
Заключение
Указанные методы уже помогли многим людям в решении этой проблемы. Надеемся, что вам они также пригодились, и ни с Microsoft Visual C++ Runtime Library Runtime error, ни с любой другой ошибкой вы больше не столкнетесь.
Если у Вас остались вопросы, можете задавать их в форме комментариев чуть ниже
Detect package identity and runtime context
You may have some versions of your app that were not distributed in an MSIX package. At runtime your app can detect whether it was deployed as an MSIX package by using the Windows Package Manager API, or your own custom installer. You may want to change the app behavior such as update settings or you may want to take advantage of functionality only available to MSIX packages.
To determine whether your application is running as an MSIX package on a version of Windows that supports the full MSIX feature set, you can use the GetCurrentPackageFullName native function in kernel32.dll. When a desktop application is running as a non-packaged application without package identity, this function returns an error which can help you infer the context in which the app is running.
If the function succeeds, it means:
- Your app is packaged in an MSIX package.
- Your app is running on Windows 10, version 1709 (build 16299) or later with full MSIX support.
Use GetCurrentPackageFullName in native code
The following code example demonstrates how to use GetCurrentPackageFullName to determine the context of an app.
Use GetCurrentPackageFullName function in managed code
To call GetCurrentPackageFullName in a managed .NET Framework app, you’ll need to use Platform Invoke (P/Invoke) or some other form of interop.
To simplify this process, you can use the DesktopBridgeHelpers library. This library supports .NET Framework 4 and later, and it uses P/Invoke internally to provide a helper class that determines whether the app is running on a version of Windows that supports the full MSIX feature set. This library is also available as a NuGet Package.
Скачать RuntimePack v.20.3.3 для Windows
RuntimePack – Это бесплатная сборка самых необходимых для Windows компонентов и DLL библиотек. В нее входят такие пакеты как Microsoft Visual C++, OpenAL, NET Framework, NVIDIA PhysX, DirectX, Java Platform, Microsoft Silverlight, Unity Web Player, Vulkan Runtime и другие.
Для чего нужна сборка RuntimePack?
Все просто, экономия времени и сил на установку каждого компонента отдельно, пакет предлагает нам все компоненты установить за один раз и решить любые проблемы, которые могут возникнуть с запуском мультимедийных программ или игр, например, с отсутствием того или иного DLL файла.
Сборка существует в двух вариантах, первый это RuntimePack Full, и второй это RuntimePack Lite, в первом случае программа содержит все возможные библиотеки, которые входят в нее, во втором варианте исключено Microsoft Visual C++, это позволяет значительно снизить размер дистрибутива программы.
Одним из самых распространённых проблем после запуска приложений является «Запуск программы невозможен, так как на компьютере отсутствует VCRUNTIME140.dll». Это одна из многочисленных проблем которую решает наша сборка, вызывает ее отсутствие предустановленной, либо более старой версии пакета Microsoft Visual C++ Redistributable Package.
Что касается установки, тут все просто, вы скачиваете по ссылке сборку, и запускаете на своем компьютере, далее происходит инсталляция всех компонентов, после чего рекомендуем перезагрузить компьютер, для того что бы все необходимые библиотеки система смогла подгрузить корректно.
Программа содержит в себе бесплатные официальные компоненты сторонних разработчиков, которые мы перечислил выше, и ниже приведем список некоторых DLL файлов которые присутствуют в сборке RuntimePack.
Список DLL библиотек x64 + x86: