The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

利用 [伺服器管理] 無法新增或移除角色或功能的問題 (IIS7)

前幾天再安裝設定 Windows Server 2008 主機時,在安裝到 .NET Framework 3.5 功能時無論如何都無法安裝成功的情況,連新增或移除特定 IIS 角色服務也都會失敗,整個錯誤訊息 (如下圖) 就是無法理解,花了幾個小時的時間才發現因為 IIS7 共用設定的關係讓所有與 IIS7 相關的功能或角色服務都無法安裝成功!

如果單純只是安裝 IIS 元件失敗的話當時可能會想到與 IIS 有關,但當時我安裝的卻是 .Net Framework 3.5.1 功能,當時壓根沒想到原來是我的 IIS7 共用設定導致安裝問題。

最後查詢到 KB 954856 才發現原來就是因為我設定了「共用設定」的關係才導致所有與 IIS 有關的元件全部都無法安裝或移除,這個問題即便到了 Windows Server 2008 R2 ( IIS 7.5 ) 還是依然存在,而且這個問題已經被微軟確認為是一個 Bug。

問題發生的原因在於 [共用設定] 的實體路徑是在 UNC 路徑上,由於安裝 IIS 相關元件時所使用的權限為 NT AUTHORITY\SYSTEM (本機系統),所以無法存取網路上的資源,這導致要修改 IIS 設定時會導致因為無法變更 applicationHost.config 的內容而發生權限不足的問題而導致失敗!

就算錯誤是合理的,但這錯誤訊息也未免太難以理解 = =』』

雖然微軟的 KB 954856 有提供權宜之計(Workaround),但我認為該文件並沒有寫完整,反而會讓需要使用共用設定的人發生其他莫名的錯誤,因此請建議用我的方式進行設定:

1. 關閉 [共用設定]

2. 關閉 [共用設定] 時,會跳出一個對話方塊來,請務必選取 [是(Y)] 好讓目前最新版的 applicationHost.config 能夠複製回本機!

3. 這時在進一步安裝或移除 IIS 相關的功能或角色服務

注意: 由於在安裝 IIS 相關功能或角色服務時會連帶異動 applicationHost.config 的內容,所以 UNC 上的 applicationHost.config 將不會有異動的部分。

例如你安裝一個 IIS 角色服務是一個 HttpModule,而安裝完成後本機的 applicationHost.config 會預設載入該模組,但 UNC 上的 applicationHost.config 並沒有載入模組的定義!因此您必須先「匯出設定檔」到 UNC 路徑上才能確保 WebFarm 的設定是對的,而且要記得所有 WebFarm 的主機都要同時做完新增或移除角色服務的動作後再全部一起上線,否則很有可能會遇到設定錯誤的情況!

4. 重新匯出設定檔

5. 重新啟用共用設定

相關連結