2010-12-14 75 views
14

難題在於確定ASP.NET是否以可靠和正確的方式在IIS7中啓用。如何檢測ASP.NET是否在IIS 7中啓用

Server Manager -> 
    Roles -> 
     Web Server (IIS) -> 
      Remove Role Services -> 
       Remove ASP.NET 

的自然場所,以確定這應該是applicationHost.config文件中:

啓用/禁用在這種情況下,通過進入完成。但是,在ASP.NET啓用或禁用的情況下,我們仍然有「ManagedEngine」模塊可用,並且我們仍然在標記中包含isapi過濾器記錄。

目前我能找到的最好方法是檢查<isapiCgiRestriction>標記是否包含aspnet_isapi.dll,或者ASPNET跟蹤提供程序是否可用。

但是,這些都沒有直接檢測到ASP.NET配置的存在,只是可能會被用戶重新配置的副作用。

我寧願通過檢查IIS配置/設定,而非操作系統本身,如果可能的話,雖然列舉了角色在服務器上&服務是可以接受的,如果我們能保證這個技術會一直努力,只要IIS7做到這一點用來。

更新

感謝您的答覆。明確說明我想要做什麼,我將服務器配置中各個位置的設置調整爲單一(只讀)視圖,以顯示用戶需要配置的軟件才能工作。

一個我需要帶的設置是這樣的一個:紅色 IIS Config showing ASP.NET not installed

的一個突出。

我不需要操縱設置,只是重現它。我想查看用戶是否在將IIS角色添加到服務器時檢查了ASP.NET框,因爲在本例中他們顯然沒有。

我想通過在IIS中查看可靠的東西來做到這一點,而不是枚舉角色服務,因爲我不想在不需要的檢查上添加任何平臺特定的依賴關係。我不知道是否有可能在沒有角色/服務基礎架構的服務器上安裝IIS7,但我更願意不擔心它。我也有一大堆庫用於清理IIS。

但是,我也很難找到如何枚舉角色/服務,所以如果有一個解決方案涉及到這樣做,它肯定會很有用,並且比檢查副作用好得多ASPNET跟蹤提供程序在附近。

不幸的是,如果您沒有檢查ASP.NET按鈕,仍然可以獲取IIS applicationHost.config文件中的ManagedEngine模塊,因此它不是可靠的檢查。您也可以將ASP.NET映射爲isapi過濾器,因此檢查它們是不夠的。這些東西在安裝ASP.NET但已被刪除的情況下尤其成問題。

看起來最好的解決方案是檢查角色服務。不過,這方面的API信息看起來很罕見,因此呼籲幫助。

+0

這是一個控制檯/ Windows窗體應用程序或從IIS應用程序本身?你是指在一個特定的網站或一般? – Kev 2010-12-14 13:06:43

+0

檢測來自Winforms應用程序。 – 2010-12-14 13:37:22

+0

檢測一般需要完成。基本上,如果ASP.NET角色服務被刪除,這是一個服務器範圍的設置,我以可靠的方式來檢測這種情況。 – 2010-12-14 13:38:42

回答

14

的絕對的方法可以知道,如果他們檢查發現或不爲搜索以下注冊表項:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\Components 

在那裏你會看到設置爲1ASPNETNetFxEnvironmentNetFxExtensibility兩個值。此註冊表項是IIS安裝密鑰,其中包含已在IIS中啓用的所有組件。

+0

就是這樣,完美,謝謝! – 2010-12-15 09:53:25

0

那麼你想要簡單的方法嗎?做一個漂亮的漂亮。aspx頁面,顯示爲一個帶有錯誤塊的HTML文件,顯示爲「需要安裝ASP.NET」的佔位符中的一個div中的一個錯誤塊,並在安裝ASP.NET時更改爲「ASP.NET已安裝」,然後只需要該工具在將該網頁複製到IIS中標識爲*:80的網站之後,在默認瀏覽器中啓動該網頁(或者通過更改XML並稍後刪除,以編程方式在IIS中創建目錄映射)

可能不是最優雅的,但它確保測試顯示真正安裝的功能與XML文件中的功能。


因爲這會尖叫「做到這一點懶惰無知的方式」我要提醒你的是,我知道在JavaScript我可以使用哪些功能是測試他們之前,我嘗試使用它們的唯一方法,或假設他們在那裏,看着它爆炸。我的觀點是,文件中報告的內容並不重要,它關係到你實際使用的內容。僅僅因爲C:\ Windows \ Micrsoft.Net \ Framework \ v3.xxxxxxxx存在並且有文件並不意味着dll被註冊在GAC中,是嗎?

+0

我並不熱衷於此。我真的在尋找一個特定的「缺少組件」測試,而不是在後臺以編程方式設置端到端的檢查,而無需詢問用戶,正確設計出所有需要的URL等。損壞的安裝肯定是一個問題,但我更感興趣尋找缺失的組件。出於我的目的,檢查.net3文件夾是否已經足夠。 – 2010-12-14 16:31:39

+0

就像我說的那樣是懶惰的簡單方法。您是否曾嘗試在ASP.NET虛擬機中的乾淨機器上安裝ASP.NET之前和之後執行applicationHost.config的快照? – jcolebrand 2010-12-14 16:34:29

+0

是的,我已經做了兩個配置文件之間的差異,唯一可靠的是在問題中提到的兩個設置。我已經用更具體的細節更新了這個問題。 – 2010-12-14 17:03:56

2

確定asp.net是否甚至是安裝的功能(啓用它的先決條件)可以通過PowerShell完成,這意味着如果您足夠努力地挖掘,那麼存在.net api。 PowerShell方法:

Import-Module servermanager 
Get-WindowsFeature web-asp-net 

這將返回一個類型爲Microsoft.Windows.ServerManager.Commands.Feature的對象。 installed屬性是布爾值,指示是否安裝了該功能。

+0

任何人都知道如何反映或得到它反映的程序集?另外,看起來去SF是一個好主意。 – jcolebrand 2010-12-14 19:13:15

相關問題