Asp.net

如何檢查 ASP.NET 4.0 是否在 IIS 7.5 上註冊

  • July 12, 2017

有沒有可靠的方法來檢查 ASP.NET 4.0 是否以程式方式在 IIS 7.5 上註冊?在 ASP.NET 應用程序安裝開始之前,我需要在安裝程序中對其進行測試作為先決條件。

如果 ASP.NET 4.0 未在 IIS 上註冊,則在安裝過程中,剛安裝的應用程序無法執行並返回 500 internal server error(現在解決問題已經太晚了)。相反,我想在任何安裝步驟開始之前顯示一些警告(並提示如何解決問題)。但是還沒有找到可靠的解決方案。

AFAIK,有時讀取的系統資料庫項可能無法正常工作。所以現在,我跑來aspnet_regiis.exe -lv列出版本(如這裡建議的那樣)並解析輸出。但即使 .NET 沒有正確註冊我的測試(錯誤地)成功,因為輸出是(包含版本 4.0):

2.0.50727.0     C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll
4.0.30319.0     C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll

(Win7 32位)

在這種情況下執行aspnet_regiis.exe -ir可以修復它。

它與此問題類似,但我需要以程式方式對其進行測試。

你有什麼想法或經驗嗎?

使用您自己的答案作為基礎,這也可以使用命令行(帶有高度)來完成:

%WINDIR%\System32\inetsrv\appcmd.exe list apppool /managedRuntimeVersion:v4.0

如果返回任何內容,則註冊 ASP.NET 4.0。這種方法的問題是,即使沒有安裝過濾器,似乎也可以手動創建 4.0 應用程序池,然後這種方法不起作用。


編輯:我最終執行了這三項檢查:

  1. aspnet_regiis.exe -lv(應返回包含“c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll”的行)
  2. appcmd.exe list apppool /managedRuntimeVersion:v4.0(應該返回包含“MgdVersion:v4.0”的行)
  3. appcmd.exe list config -section:system.webServer/isapiFilters(應返回包含“c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_filter.dll”的行)

請注意,我只關心 32 位版本。

如果三項檢查都通過,則可以斷定 ASP.NET 4.0 已註冊。儘管如此,仍然不是 100% 的誤報證明。

這是一個老問題,但我發布了一個答案,因為您的問題是Google上的頂級結果之一,並且沒有答案。

您要查找的系統資料庫項是HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\4.0.30319.0. 如果該密鑰存在,則 .Net 4 已安裝並已在 IIS 中註冊。

如果您只想檢查是否安裝了 .Net 4,可以檢查HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full.

引用自:https://stackoverflow.com/questions/9903543