Как определить, установлено ли ядро ​​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 перечислены отдельно. Дополнительные версии, скорее всего, появятся в будущем.