如何确定是否已在Windows服务器上安装asp.net核心

时间:2016-07-25 12:28:03

标签: asp.net-core .net-core

我正在设置各种Windows服务器来托管asp.net核心应用程序,我需要能够确定他们是否安装了asp.net托管包。

https://docs.asp.net/en/latest/publishing/iis.html#install-the-net-core-windows-server-hosting-bundle说:

  

"在服务器上安装.NET Core Windows Server Hosting软件包。   该软件包将安装.NET Core Runtime,.NET Core Library和   ASP.NET核心模块。该模块之间创建反向代理   IIS和Kestrel服务器。"

我正在设置部署,我需要确保我的服务器已配置好,以便运行asp.net核心应用程序。

基本上,我正在寻找一个注册表项或其他方式告诉我是否应该运行安装程序设置。 (就像我们告诉他们是否安装了旧版本的框架一样,例如 https://support.microsoft.com/en-us/kb/318785 适用于早期版本)

7 个答案:

答案 0 :(得分:12)

您可以在Microsoft .NET Core 1.1.1 - Windows Server Hosting路径下搜索HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Updates\.NET Core注册表项,如下面的屏幕截图所示。

enter image description here

您也可以使用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"
}

您可以从How to determine ASP.NET Core installation on a Windows Server by PowerShell下载示例。

答案 1 :(得分:7)

您可以使用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" }}

答案 2 :(得分:4)

如果允许引入约束,一个选项是仅允许“自包含应用程序”,因为它们不需要任何额外的安装。这也会使“安装的版本”等问题消失。

如果您需要支持“便携式应用”,您只需执行以下操作即可检查dotnet.exe是否可用:

where dotnet

然后您可以查看版本:

dotnet --version

这也允许您在成为问题后检查.NET Core的版本。

答案 3 :(得分:4)

如果已安装.NET Core CLI,则可以尝试:

dotnet --list-runtimes

将打印以下内容:

Microsoft.NETCore.App 3.0.0 [c:\ program files \ dotnet \ shared \ Microsoft.NETCore.App] Microsoft.NETCore.App 3.1.0 [c:\ program files \ dotnet \ shared \ Microsoft.NETCore.App]

参考:Microsoft doc

答案 4 :(得分:0)

你可以看看

  

HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \微软\的Windows \ CurrentVersion \卸载{ab4f6e29-67a1-47d9-b2ab-43348a9bbae4}

并确保“Microsoft .NET Core 1.0.0 - Windows Server Hosting”在那里

答案 5 :(得分:0)

您也可以双击DotNetCore.1.0.1-WindowsHosting.exe
如果已安装.NET Core Windows Server Hosting包,则打开窗口将具有:

  1. 修改设置标签
  2. 修复和卸载按钮
  3. 修复和卸载按钮以及修改设置标签 Microsoft .NET Core 1.0.1 - Windows Server Hosting Setup already installed

答案 6 :(得分:0)

请注意,这些命令需要在Powershell中以管理员身份运行。

使用IISAdministration powershell module所有模块可以列出如下:

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'
}

请注意,在撰写本文时,AspNetCoreModuleAspNetcoreModuleV2分别列出。其他版本可能会在将来出现。