如果應用程式有用到 Crystal Reports 元件,在部署到用戶端電腦時,就必須連同 CR 的共用元件一起部署,否則程式執行時會出現類似以下的錯誤訊息:

System.IO.FileNotFoundException: 找不到檔案或組件名稱 'CrystalDecisions.Windows.Forms' 或其相依性的其中之一。

但是由於 CR 需要部署的檔案很多,自己打包挺麻煩的,如果用 Crystal Reports 官方提供的已經打包好的安裝檔案就省事多了。以下把我製作 CR 安裝程式的步驟做個簡要的說明:

首先,在 Visual Studio 中建立一個新的 Setup 專案,把應用程式必要的檔案加入之後,再加入 CR 的 merge modules 即可,做法是從 Solution Explorer 中的專案項目上點右鍵 > Add > Merge Module,接著會開啟一個選擇檔案的對話窗,而且目錄會直接切到 Program Files\Common Files\Merge Modules\,只要挑選必要的合併模組就行了,例如:CrystalReports10_NET_EmbeddedReporting.msm (CR 11 則是 Crystal11_NET_EmbeddedReporting.msm)。一般情況下,只要這個檔案就夠了,如果你用到了其他的功能,就得自行判斷是 否要加入其它合併模組。

接著在 Solution Explorer 裡點選剛才加入的合併模組,再到 Properties 視窗裡展開 MergeModuleProperties 屬性,找到 KeyCode 屬性,然後輸入合法的 Crystal Reports 授權碼。這個步驟非常重要,一定要有正確的授權碼,否則部署到用戶端時,還是無法開啟報表。你可以從 Visual Studio 的 Help > About Microsoft Development Environment 裡面找到 Crystal Reports 的合法授權碼。

關於 CR 部署的兩三事

CR 官方網站上已經有提供打包好的部署檔案可供下載,而部署檔案主要分成兩種:

  1. Server install 檔案。
  2. Merge module 檔案。

所謂 server install,就是一個獨立的 .msi 安裝程式,適合用在當你只需要安裝 Crystal Reports 共用組件的情況,使用者會在安裝過程中看到並且操作這個安裝程式。要注意的是,此安裝程式不能直接執行,如果你直接執行 server install 的安裝程式,它會秀出一個訊息窗告訴你這個安裝程式必須使用 setup.exe 來執行。這個 setup.exe 通常就是你自己打包的安裝程式。換句話說,server install 的方式是把你的應用程式跟 CR 共用組件分開成兩個安裝程式。

而 merge modules 則是可以放到你安裝程式裡面,把你的應用程式以及 merge modules 全部打包成一個安裝程式,這樣在安裝過程中,使用者就不會明顯感覺到有執行兩個安裝步驟。

你也可以到官方網站 http://support.businessobjects.com 下載 Crystal Reports 的部署檔案,請依照你在開發時所使用的 CR 版本下載對應版本的部署檔案。

 

如何得知你的應用程式使用的 CR 版本? 

你可以在 Visual Studio 中開啟你的應用程式專案,然後在 Solution Explorer 裡面展開專案的 References 項目,點選任何一個以 'crystaldecisions' 開頭的組件參考,然後觀看 Properties 視窗裡面顯示的版本編號,即可得知你在開發時所使用的 CR 版本。

關於以上兩種安裝方式,官方網站已經有提供一份說明文件,你可以自行到網站下載這份文件。先到 http://support.businessobjects.com/search/default.asp 搜尋關鍵字 "crystal reports XI deployment",然後從搜尋結果中尋找標題為「Crystal Reports XI and Visual Studio .NET - Application Deployment」的文章,點進去後即可下載一份名為 "crxi_net_deployment.pdf" 的檔案。