2015年12月3日 星期四

Win 8.1 安裝 IIS 伺服器

今天收到資安單位來函要求將 IE 升版到 IE11, 以避免安全漏洞. 這給我出了個難題, 因為我的新版工作日誌系統還沒弄好, 而目前使用的舊系統只能在 IE9 以下跑, 升到 IE10 就會有問題 (編輯器 & 檔案上傳). 為今之計只有將舊系統改版應急才是上策. 舊系統使用 IIS+ASP+ACCESS 設計, 而我的電腦已經沒有一台有 IIS 伺服器, 只好上網搜尋安裝 IIS 的方法, 參考 :

如何在 Windows 8 安裝 IIS 8 ?
# 在 IIS 上建置傳統 ASP 網站

我的筆電是 WIN8.1, 所以就按圖索驥試試看, 安裝紀錄如下 :

首先按 Windows+Q 鍵, 在搜尋框內輸入 feature :


點選 "開啟或關閉 Windows 功能" :
勾選 Internet Information Service 以及 Web 管理工具下的項目如下 :


同時也選應用程式項下的 ASP 與 ISAPI 擴充程式 :


按確定就開始搜尋必要的檔案, 完成後就可以到 "控制台/系統管理工具", 點選 "Internet Information Services (IIS) 管理員", 點選左方 "連結" 面板中的 "站台", 可看到其預設網站繫結 :


由於我的筆電早已安裝 Apache+PHP+mySQL, HTTP 80 埠已經被 Apache 伺服器用了, 為了避免衝突, 必須將 IIS 的改為其他埠號, 例如 81. 在預設站台列上按滑鼠右鍵, 點選 "繫結" :


按編輯, 將 PORT 改為 81, 主機名稱設為 localhost :


然後點選 Default Web Site, 按滑鼠右鍵, 點選 "管理網站/啟動" 來啟動網站 :


這樣就完成 localhost 網站設定了, 打開瀏覽器連線 localhost:81 即可 :


這是 ASP 的預設站台, 如果要建立自己的網站, 先點選 "站台", 按滑鼠右鍵, 點選 "新增網站" :


在彈出選單中設定網站屬性 :


此處我將網站檔案放在 E:\myasp 下, 而且網站取名 myasp, 所以實體路徑只要填 E:\ 即可 (不要填 E:\myasp, 這樣 IIS 會以為是 E:\myasp\myasp), 我以為這樣就 OK 了, 就啟動 myasp 站台, 然後用瀏覽器連線 localhost:81/myasp 卻得到如下錯誤訊息 :

An error occurred on the server when processing the URL. Please contact the system administrator.
If you are the system administrator please click here to find out more about this error.


我在 "在IIS7中顯示ASP偵錯訊息" 這篇找到解法, 原來 IIS8 預設是關閉 ASP 的偵錯訊息的, 先點選 myasp 站台, 再點 ASP 按鈕 :


在選單的 "編譯/偵錯內容" 的 "將錯誤傳送到瀏覽器" 從 False 改為 True (同時也將伺服端與用戶端偵錯打開), 然後按右上角 "動作/套用" 即可 :


這時將 localhost:81/myasp 重新整理就會顯示錯誤訊息了 :

ADODB.Connection 錯誤 '800a0e7a'

找不到提供者。它可能未被正確安裝。

/myasp/sys_bin\access_adodb_connection_sys.asp, 行10


看起來是跟資料庫連線有關, 因為我的 myasp 架站系統採用 ACCESS 資料庫, 需使用 Microsoft.Jet.OLEDB.4.0 這個 32 位元程式來建立連線, 而 IIS 預設不執行 32 位元程式, 參考 :

ADODB.Connection 錯誤 '800a0e7a'

點選站台按滑鼠右鍵, 再點進階設定 :


將 "一般/啟用 32 位元應用程式" 改為 True 即可 :


如此這般, 再重新整理 localhost:81/myasp 就能看到 myasp 網站的畫面了 :


這個  12 年前開發的老骨董是我模仿當時很紅的 myPHPnuke 架站機用 JScript 寫的 ASP 版本, 我只是把 myPHPnuke 架好, 然後將主要的功能大略玩一遍, 了解其運作模式後就開工了, 也沒有去研究它是怎麼寫的 (還沒學 PHP, 看不懂). 那時最主要的目的是為了寫碩士論文, 因為蒐集了一堆文獻, 研讀之後需要做筆記, 為了在寫文獻回顧時搜尋方便, 就花了一個多月寫了這個 ASP 架站機, 畢業後就拿到公司用, 沒想到一用就超過十年了.

ASP 已經是很舊的技術了, 但因我對 .NET 一直無法認同, 所以也不想進階到 ASP.NET. 就算是 ASP 我也是用 Javascript 寫, 絕不用 VBScript.

其他參考 :

http://demos.telerik.com/kendo-ui/editor/index (HTML 編輯器)
網站無法執行 - 程序無法存取檔案

2015-12-04 補充 :

今天又發現一個 IIS 設定的問題, 因為 sys_bin 下的 include_programs_iis.asp 這個程式在含括應用程式檔案時會用到上層目錄 :

  case 'jlog' : {
%>       <!-- #include file="..\bin\jlog.asp" --><%
     break;}

所以進入應用程式時會出現下列錯誤 :

Active Server Pages 錯誤 'ASP 0131'
不允許的上層路徑
/myasp/sys_bin\include_programs_iis.asp, 行63
包含檔案 '..\bin\jlog.asp' 不能包含 '..' 來指出上層目錄。


這要在 ASP 中開啟上層目錄 :


注意, 在 "編譯/指令碼語言" 欄位我已將預設的 VBScript 改成 JScript, 因為我的 ASP 專案全部都是用 Javascript 寫的.

2015-12-08 (二) 補充 :

今天測試工作日誌的上傳功能時發現, IIS 8 跟以前 XP 時代的 IIS 6 不同之處是其 ASP 指令碼解譯欄位似乎只能在預設的 VBScript 與 JScript 中選一個填, 以前可以填兩個, 但現在不管填 JScript;VBScript 或 JScript, VBScript 都無法執行. 我的工作日誌全部用 JScript 寫, 唯獨檔案上傳處理程式使用了 VBScript, 這是從所買的 ASP 書裡面抄來的. 最後在下面這篇找到解法 :

Call a function written on VB from a JScript code (classic ASP)

原來只要在上傳處理程式 fupaction.asp 開頭加上下面這行即可 :

<%@ Language="VBScript" %>

此指令是強制伺服器改用 VBScript 解譯器來執行程式中的命令.



沒有留言 :