﻿# 解決IIS在「啟用 32 位元應用程式」之後網站無法執行的問題

雖然在 2014 年的今天，依然還是有許多第三方元件無法正確執行在 64 位元的 CPU 架構下。當我們想要將 ASP.NET 網站跑在 32 位元的應用程式集區上時，IIS 的應用程式集區勢必做出設定，雖然這是個非常容易的設定，但有時候網站卻會在應用程式集區設定完「啟用 32 位元應用程式」之後立刻陣亡，搭配著的晦澀不明的錯誤訊息，真的會有點吐血。接下來，就讓我們一起探究問題的根源吧！

以前我們只要針對要設定的應用程式集區，調整其「進階設定」的「啟用 32 位元應用程式」為 True 即可設定完成。

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/5093dab42097ce91765f-image_2488.png)

不過，你很有可能在調整了這個設定之後讓網站掛掉，且應用程式集區也會直接停止，上圖即是將「啟用 32 位元應用程式」切換到 True 並在瀏覽網站後讓應用程式集區掛掉的狀況，所以 DefaultAppPool 才會是停止的狀態。這時網頁的錯誤訊息如下：

> **Service Unavailable**
> 
> **
> 
> * * *
> 
> **
> 
> HTTP Error 503. The service is unavailable.
> 
> ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/5c526cae292f24101abe-image_2489.png)

如果你開啟事件檢視器查看，很有可能看到一些沒什麼幫助的錯誤訊息，例如：

-   正在自動停止應用程式集區 'DefaultAppPool'，因為服務該應用程式集區的處理序中發生一連串的失敗。
-   服務應用程式集區 'DefaultAppPool' 的工作者處理序 '6260' 中，有個通訊協定 'http' 的接聽程式通道回報接聽程式通道失敗。資料欄位包含錯誤號碼。

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/48b099e744b390569c13-image_2490.png)

事實上，是你看錯地方了！真正有幫助的錯誤訊息，其實在【Windows 紀錄 / 應用程式】這邊：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/ef138b57167ae5fc3c45-image_2491.png)

所以對我們真正有益的錯誤訊息是：

-   無法下載 C:\\WINDOWS\\system32\\inetsrv\\**rewrite.dll** 模組 DLL。資料為該錯誤。

從這個錯誤訊息看來，自然可以判斷出跟 URL Rewrite 模組有關，不過當你第一次看到「**資料為該錯誤**」時，應該只會怪自己中文造詣不好對吧！(誤) XD

一般來說我都會透過 [Web Platform Installer](http://www.microsoft.com/web/downloads/platform.aspx) (Web PI) 來幫我安裝 IIS 模組，當安裝 URL Rewrite 模組的時候，Web PI 其實會自動幫我安裝 x64 位元的版本，如果我想另外下載 x86 的版本，還沒辦法安裝呢！如下圖示：

![image](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/0328e982d5271e24f558-image_2492.png "image")

~~由於 IIS 的 URL Rewrite 模組無法在 64 位元作業系統安裝 x86 版本~~ (**2014/5/14 更新**: 經測試，只有 Windows 8.1 的 IIS 8.5 才無法讓 URL Rewrite 模組執行在 32-bit 模式下，其他像是 Windows Server 2012 R2 上面的 IIS 8.5 並不會發生問題)，如果你要將網站執行在 64 位元電腦的 x86 架構下，則必須移除這個網站的 URL Rewrite 模組，不過我們要的並不只是不單單將有問題的模組移除而已，我們還希望同一台主機的其他網站還能正常使用 URL Rewrite 模組，那這要怎樣設定呢？請參考以下步驟！

1\. **以系統管理人員身分**執行 Notepad 或其他文字編輯軟體

2\. 開啟 C:\\Windows\\System32\\inetsrv\\config\\applicationHost.config 檔案

3\. 搜尋以下字串  
<add name="RewriteModule" image="%SystemRoot%\\system32\\inetsrv\\rewrite.dll"

3\. 將這行修改如下，也就是新增下方紅字的部分，然後直接存檔  
<add name="RewriteModule" image="%SystemRoot%\\system32\\inetsrv\\rewrite.dll" preCondition="bitness64" />

4\. 接著切換到要停用 URL Rewrite 模組的站台 (其應用程式集區已啟用 32 位元應用程式)，請用滑鼠雙擊「模組」功能

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/8e2a3258d07954404210-SNAGHTML21ee6cab.png)

5\. 最後直接移除 RewriteModule 這個模組

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/be9df78deb703d75ef0b-SNAGHTML21f038ff.png)

設定完成！

事實上，在問題發生的當下，你並不知道哪一個模組發生了問題，所以學會查看事件檢視器，算是身為 IT 人員的必備技能之一，以上破案過程供大家參考！

**相關連結**

-   [URL Rewrite : The Official Microsoft IIS Site](http://www.iis.net/downloads/microsoft/url-rewrite)
-   [Where did my IIS7 server go? Troubleshooting 503 "service unavailable" errors](http://mvolo.com/where-did-my-iis7-server-go-troubleshooting-503-quotservice-unavailablequot-errors/)
-   ["Service Unavailable" in IIS7 with 32 bit application pool](https://www.cloudnotes.io/service-unavailable-in-iis7-with-32-bit-application-pool/)
