2010-09-17 70 views
3

我正在編寫一些代碼來允許用戶遠程管理IIS7。引擎蓋下,這增加授權規則c:\windows\system32\inetsrv\config\administration.config在以下配置部分:爲什麼使用IIS7.5的Microsoft.Web.Management.dll僅適用於64位進程?

system.webServer/management/authorization/authorizationRules

我使用的Microsoft.Web.Administration集和命名空間的代碼類似於以下:

using Microsoft.Web.Management.Server; 
... 
ManagementAuthorization.Grant("MySiteUser, "My Web Site", false); 

如果在32位進程中運行,如果內置爲64位,則此代碼會引發異常:

 
System.Runtime.InteropServices.COMException was unhandled 
    Message=Filename: \\?\C:\Windows\system32\inetsrv\config\administration.config 
Error: The configuration section 'system.webServer/management/authorization' cannot be read because it is missing a section declaration` 

然而其他服務器管理任務使用Microsoft.Web.Administration組件和命名空間的工作只是在一個32位的處理細進行,例如:

using Microsoft.Web.Administration; 
.... 
int iisNumber = 60000; 
using (ServerManager serverManager = new ServerManager()) 
{ 
    var site = serverManager.Sites.Where(s => s.Id == iisNumber).SingleOrDefault(); 
    if (site != null) 
    { 
    site.Stop(); 
    } 
} 

這兩個組件出現在GAC並且是純MSIL(即使有一個COM互操作層可以直接與IIS7的底層管理機制對話)。

的基本配置文件applicationHost.configadministration.config只對64個編輯器(如NOTEPAD.EXE或NotePad2.exe)可見,我懷疑這就是爲什麼我的代碼無法通過Microsoft.Web.Management

爲什麼修改administration.configMicrosoft.Web.Administration允許我在32位過程中讀取/修改applicationHost.config,但如果在64位過程中運行,Microsoft.Web.Management只能讀取/修改administration.config

我無法將我的項目重新編譯爲目標x64,因爲存在對我們沒有源代碼的32位COM庫的依賴。我可以構建一個工作,其中涉及調用一個進程外64位WCF應用程序(或一些類似的東西),但不願意。

回答

2

經過一番挖掘它看起來像這是一個錯誤:

本次論壇主題和卡洛斯·阿吉拉爾後解釋了所有:

http://forums.iis.net/p/1157779/1956471.aspx

現在我明白了這個問題,是什麼 發生的情況是,卡西尼是一個32位的 進程,並在我們的配置中的一個 錯誤的聯合使我們嘗試 加載「重定向」syswow (而不是system32)這是 之所以我們無法找到 administration.config。在64位運行 位進程緩解問題 因爲沒有「魔術」重定向 我們進入正確的文件夾。

任何32位進程都會遇到這個roadhump。

相關問題