我正在編寫一些代碼來允許用戶遠程管理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.config
和administration.config
只對64個編輯器(如NOTEPAD.EXE或NotePad2.exe)可見,我懷疑這就是爲什麼我的代碼無法通過Microsoft.Web.Management
爲什麼修改administration.config
Microsoft.Web.Administration
允許我在32位過程中讀取/修改applicationHost.config
,但如果在64位過程中運行,Microsoft.Web.Management
只能讀取/修改administration.config
?
我無法將我的項目重新編譯爲目標x64,因爲存在對我們沒有源代碼的32位COM庫的依賴。我可以構建一個工作,其中涉及調用一個進程外64位WCF應用程序(或一些類似的東西),但不願意。