Как определить, установлено ли ядро asp.net на сервере Windows
Я настраиваю различные серверы Windows для размещения основных приложений asp.net, и мне нужно определить, установлен ли пакет хостов asp.net.
https://docs.asp.net/en/latest/publishing/iis.html#install-the-net-core-windows-server-hosting-bundle говорит:
"Установите пакет хостинга Windows Server Core для Windows Server на сервере. В комплекте будет установлена среда .NET Core Runtime,.NET Core Library и базовый модуль ASP.NET. Модуль создает обратный прокси между IIS и сервер Kestrel."
Я настраиваю развертывание, и мне нужно убедиться, что мой сервер настроен, поэтому я могу запускать основные приложения asp.net.
Я ищу, в основном, ключ реестра или какой-либо другой способ сказать мне, следует ли мне запускать установку установщика. (что-то вроде того, как мы скажем, установлены ли старые версии фреймворка, например
https://support.microsoft.com/en-us/kb/318785
для более ранних версий)
Ответы
Ответ 1
Вы можете найти раздел Microsoft .NET Core 1.1.1 - Windows Server Hosting
в разделе HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Updates\.NET Core
, как показано ниже.
![введите описание изображения здесь]()
Также вы можете использовать PowerShell для определения того, существовал ли ключ или нет.
$DotNETCoreUpdatesPath = "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Updates\.NET Core"
$DotNetCoreItems = Get-Item -ErrorAction Stop -Path $DotNETCoreUpdatesPath
$NotInstalled = $True
$DotNetCoreItems.GetSubKeyNames() | Where { $_ -Match "Microsoft .NET Core.*Windows Server Hosting" } | ForEach-Object {
$NotInstalled = $False
Write-Host "The host has installed $_"
}
If ($NotInstalled) {
Write-Host "Can not find ASP.NET Core installed on the host"
}
И вы можете скачать образец из Как определить установку ASP.NET Core на Windows Server с помощью PowerShell.
Ответ 2
Вы можете использовать powershell, чтобы проверить, зарегистрирован ли хостинг-модуль в IIS
На локальном сеансе powershell
Import-module WebAdministration
$vm_dotnet_core_hosting_module = Get-WebGlobalModule | where-object { $_.name.ToLower() -eq "aspnetcoremodule" }
if (!$vm_dotnet_core_hosting_module)
{
throw ".Net core hosting module is not installed"
}
Если вы хотите сделать в удаленном сеансе, замените первые 2 строки на
Invoke-Command -Session $Session {Import-module WebAdministration}
$vm_dotnet_core_hosting_module = Invoke-Command -Session $Session {Get-WebGlobalModule | where-object { $_.name.ToLower() -eq "aspnetcoremodule" }}
Ответ 3
Если вам разрешено вводить ограничения, один из вариантов - разрешать только "автономные приложения", поскольку они не требуют каких-либо дополнительных установок. Это также приводит к исчезновению таких проблем, как "какая версия".
Если вам нужно поддерживать "портативные приложения", вы можете просто выполнить следующее, чтобы проверить, доступен ли dotnet.exe:
where dotnet
Затем вы можете проверить версию:
dotnet --version
Это также позволит вам проверить версию .NET Core, когда это станет проблемой.
Ответ 4
Вы можете посмотреть
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall {ab4f6e29-67a1-47d9-b2ab-43348a9bbae4}
и убедитесь, что "Microsoft.NET Core 1.0.0 - хостинг Windows Server" есть
Ответ 5
Вы также можете дважды щелкнуть DotNetCore.1.0.1-WindowsHosting.exe
Если пакет хостинга .NET Core Windows Server уже установлен, откроется окно открытия:
- Изменить метку настройки
- Кнопки восстановления и удаления
Кнопки восстановления и удаления и метка "Изменить установку".
![Microsoft.NET Core 1.0.1 - Установка хостинга Windows Server уже установлена ]()
Ответ 6
Обратите внимание, что команды необходимо запускать в powershell от имени администратора.
Используя модуль PowerShell IISAdministration, все модули могут быть перечислены следующим образом:
Import-Module IISAdministration
(Get-IISConfigSection -SectionPath "system.webServer/globalModules" '
| Get-IISConfigCollection).GetCollection() '
| select @{n="name";e={$_.GetAttributeValue("name")}}, '
@{n="image";e={$_.GetAttributeValue("image")}}, '
@{n="preCondition";e={$_.GetAttributeValue("preCondition")}}
Таким образом, тест может быть, например,
$coreModule =
(Get-IISConfigSection -SectionPath "system.webServer/globalModules" '
| Get-IISConfigCollection).GetCollection() '
| where {$_.GetAttributeValue("name") -eq "AspNetCoreModuleV2" }
if (-not $coreModule)
{
throw 'AspNetCoreModuleV2 is not installed'
}
Обратите внимание, что на момент написания этой статьи AspNetCoreModule
и AspNetcoreModuleV2
перечислены отдельно. Дополнительные версии, скорее всего, появятся в будущем.