在 ASP 上使用元件


  最近常看到有人問到如何透過 ASP 產生 Word 文件、Excel 檔或是啟動自製元件,這些說明在 MSDN 中均可找到,我只整理我喜歡的慣用做法,當然有其他方法,不過個人喜好不同,你也可以自己試試。

  在介紹方法之前,有些要先說,在 ASP 直接包大物件效能很差,若要存取大型物件,比如說 Word 或是 Excel ,最好自己另外開發 DCOM 來存取,當另行開發 DCOM 時,下面文章要對應的就是你的 DCOM 權限設定,而自行開發 DCOM 可以自行定義權限,就可以增加權限控管或是減少遙控功能以避免產生危害。

  基本上通常不能執行的錯誤訊息是權限不足,那就是怎樣調權限的問題,比如說如下圖:

  當你在開發階段時,若是發生沒有使用權限: 'CreateObject' 這類錯誤,而其他元件又可以用,主要是這個目標元件權限要修正。

  首先是預設權限,如果 IIS 採用匿名存取,則會使用 IUSR_servername 的權限 (servername 是你的電腦名,之後不再重複說明) ,因為他是屬於 Guests 群組,所以可能會在你的電腦上不能寫入檔案,比如說 Word 開啟時,會在工作目錄及暫存目錄開啟暫存檔,而 IUSR_servername 在你電腦上是沒有暫存目錄的,所以問題會更複雜。解決不能沒有權限存取的方法主要分成兩種,一種是調高 IUSR_servername 的權限,使他在 Server 電腦上能存取檔案,但是我不喜歡,一方面是危險,一方面還要吃硬碟等。另一種方式是替你的目標元件建立代理使用者,建立代理使用者就是在系統中建立或挑選一個足夠權限的使用者,以他的名義執行該元件,管理的時候,最好另建立一個,我主要是開發,所以就選我的帳號來執行。設定步驟如下:

  1. 執行 dcomcnfg.exe
  2. 修改安全性設定。如果要省事,或是使用到很多元件,可以修改預設值,若是不喜歡修改預設值,也可以先執行步驟 5 選定元件後,單獨設定該元件的安全性。
  3. 設定存取權。我把 servername 遮掉了,需要透過新增按鈕將使用者 IUSR_servername 及 IWAM_servername 設定允許存取。
  4. 設定啟動權。我把 servername 遮掉了,需要透過新增按鈕將使用者 IUSR_servername 及 IWAM_servername 設定允許存取。
  5. 選擇目標元件,比如說選擇 Word 。
  6. 設定代理執行人,我是屬於開發人員,所以代理執行人就設定為我的帳號,不過要記住,若代理執行人密碼更改時,一定要來這個對話盒改,否則會無法執行。
  7. 其他權限設定。如果你的元件必須由 ASP/ASP.NET 動態產生檔案時,你可能就要透過檔案總管設定那個目錄權限,ASP 需設定 IUSR_servername 這個帳戶存取,ASP.NET 在 Windows 2000/XP 上需設定 ASPNET 這個帳戶,ASP.NET 在 Windows 2003 上需設定 NETWORK SERVICE 這個群組,比如說用 Access 資料庫時,會自動產生 ldb 檔案,此時該目錄應設定此屬性,若非由 ASP/ASP.NET 產生檔案,而是由元件產生檔案時,則不須開放此屬性。

  這個範例是透過支援 Automation 的軟體繪製等雨量線,需由 ASP 產生純文字檔當輸入檔,所以才需要設定這個屬性。相關權限設定完畢後,系統就可以執行你所要的元件了。如下圖等雨量線已可繪製: