Как вы программно проверяете версию .NET в Windows 7 и Windows 10? - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь установить приложение, которое требует .NET 4.5.Мне нужно проверить, установлен ли .NET 4.5 или нет.Я создал BAT-файл для проверки версии .NET и установщика 4.5 (если он еще не установлен) перед установкой моего приложения.

Я хотел бы найти BAT-скрипт, который можно использовать для проверки.NET версия, но все, что я нашел, требует другого инструмента, который я не могу гарантировать, будет на установочном компьютере.Вместо этого я написал небольшое приложение, которое проверяет версию .NET.Приложение работает нормально, НО, я не знаю, как заставить программу работать на всех компьютерах.Если я нацеливаю приложение на .NET 2.0, то у меня возникают проблемы с компьютерами, которые имеют .NET 4.5, но не имеют 2.0.Если я планирую запустить его на 4.5, то, очевидно, он требует 4.5 и может работать только на компьютерах, на которых уже установлено 4.5.

Как лучше всего проверить, нужно ли мне устанавливать 4.5, это будет работать на любомКонфигурация Windows?

1 Ответ

0 голосов
/ 10 мая 2018

Как сообщается в комментариях, действительно не нужно знать заранее о запуске установки, если установщик в любом случае наполовину приличный, он должен остановить / сообщить, если требования не выполнены.

Вот командный файл, (Vista +) , который должен выполнить поиск в реестре и перечислить установленные версии:

@Echo Off
SetLocal EnableDelayedExpansion
Set "rk=HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP"
Set/A "vi=ri=0"

For /F "Tokens=3*" %%A In ('Reg Query "%rk%" /F v /K') Do If "%%B"=="" (
    If Not "%%~xA"=="" (Set/A "vi+=1"
        For /F "Tokens=2*" %%C In (
            'Reg Query "%rk%\%%~nxA" /V Version 2^>Nul^|Find /V "\"'
        ) Do Set "_v!vi!=%%D"
    ) Else (Set/A "ri+=1"
        For /F "Tokens=2*" %%E In (
            'Reg Query "%rk%\%%~nxA\Full" /V Release 2^>Nul^|Find /V "\"'
        ) Do Set/A "_r!ri!=%%F"))
If %ri% Gtr 0 (Set/A "vi+=1"
    For /F "Tokens=2" %%A In ('FindStr/B "!_r%ri%!" "%~f0"'
    ) Do Set "_v%vi%=%%A") 

If %vi% Gtr 0 For /F "Tokens=1* Delims==" %%A In ('Set _v') Do Echo([%%B]

Timeout -1
GoTo :EOF

Rem Later Version Table - do not remove
378389 4.5
378675 4.5.1
378758 4.5.1
379893 4.5.2
393295 4.6
393297 4.6
394254 4.6.1
394271 4.6.1
394802 4.6.2
394806 4.6.2
460798 4.7
460805 4.7
461310 4.7.1
461310 4.7.1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...