DevExpress 開發經驗總結3 製作項目安裝包
- 2019 年 10 月 4 日
- 筆記
使用DevExpress控制項包開發C/S項目完成後,部署前需要製作本地安裝包。本文還是使用「SetupFactory」安裝工廠來製作安裝包。在以前的系列文章中詳細介紹過該工具的使用,請參考http://www.cnblogs.com/SavionZhang/p/4106338.html。
實際情景:SetupFactory V9.0.3、DevExpress14.1.8、依賴程式.Net Framework 4.0。
由於項目中引用了很多DevExpress控制項庫中的DLL

紅色框內是項目的實際引用DLL。由於其特殊性,打包的時候不能簡單的將其拷貝到安裝包目錄下,需要將它們註冊到Global Assembly Cach(全局程式集快取),在電腦的系統盤如:C:Windowsassembly看到目前電腦上安裝的GAC。

註冊DLL到GAC有兩種辦法:一種是把DLL拖入windows/assembly目錄下(不是複製粘貼,是拖動);另外一種是使用gacutil.exe工具。在客戶端安裝的時候不能讓用戶自己去拖住,主要問題的客戶也不可能懂得我們程式世界的問題。所以使用gacutil.exe工具。
(1)到網上下載gacutil.exe工具;
(2)書寫.bat腳本。內容如下:
1 @echo off 2 color 1e 3 title 註冊DevExpress控制項 4 5 set "pathdev=%~dp0" 6 7 gacutil -u "DevExpress.BonusSkins.v14.1" 8 mkdir %windir%assemblyGAC_MSILDevExpress.BonusSkins.v14.114.1.8.0__b88d1754d700e49a 9 copy %pathdev%DevExpress.BonusSkins.v14.1.dll %windir%assemblyGAC_MSILDevExpress.BonusSkins.v14.114.1.8.0__b88d1754d700e49a 10 11 gacutil -u "DevExpress.Data.v14.1" 12 mkdir %windir%assemblyGAC_MSILDevExpress.Data.v14.114.1.8.0__b88d1754d700e49a 13 copy %pathdev%DevExpress.Data.v14.1.dll %windir%assemblyGAC_MSILDevExpress.Data.v14.114.1.8.0__b88d1754d700e49a 14 15 gacutil -u "DevExpress.DataAccess.v14.1" 16 mkdir %windir%assemblyGAC_MSILDevExpress.DataAccess.v14.114.1.8.0__b88d1754d700e49a 17 copy %pathdev%DevExpress.DataAccess.v14.1.dll %windir%assemblyGAC_MSILDevExpress.DataAccess.v14.114.1.8.0__b88d1754d700e49a 18 19 gacutil -u "DevExpress.Images.v14.1" 20 mkdir %windir%assemblyGAC_MSILDevExpress.Images.v14.114.1.8.0__b88d1754d700e49a 21 copy %pathdev%DevExpress.Images.v14.1.dll %windir%assemblyGAC_MSILDevExpress.Images.v14.114.1.8.0__b88d1754d700e49a 22 23 gacutil -u "DevExpress.Printing.v14.1.Core" 24 mkdir %windir%assemblyGAC_MSILDevExpress.Printing.v14.1.Core14.1.8.0__b88d1754d700e49a 25 copy %pathdev%DevExpress.Printing.v14.1.Core.dll %windir%assemblyGAC_MSILDevExpress.Printing.v14.1.Core14.1.8.0__b88d1754d700e49a 26 27 gacutil -u "DevExpress.Utils.v14.1" 28 mkdir %windir%assemblyGAC_MSILDevExpress.Utils.v14.114.1.8.0__b88d1754d700e49a 29 copy %pathdev%DevExpress.Utils.v14.1.dll %windir%assemblyGAC_MSILDevExpress.Utils.v14.114.1.8.0__b88d1754d700e49a 30 31 gacutil -u "DevExpress.XtraBars.v14.1" 32 mkdir %windir%assemblyGAC_MSILDevExpress.XtraBars.v14.114.1.8.0__b88d1754d700e49a 33 copy %pathdev%DevExpress.XtraBars.v14.1.dll %windir%assemblyGAC_MSILDevExpress.XtraBars.v14.114.1.8.0__b88d1754d700e49a 34 35 gacutil -u "DevExpress.XtraEditors.v14.1" 36 mkdir %windir%assemblyGAC_MSILDevExpress.XtraEditors.v14.114.1.8.0__b88d1754d700e49a 37 copy %pathdev%DevExpress.XtraEditors.v14.1.dll %windir%assemblyGAC_MSILDevExpress.XtraEditors.v14.114.1.8.0__b88d1754d700e49a 38 39 gacutil -u "DevExpress.XtraGauges.v14.1.Core" 40 mkdir %windir%assemblyGAC_MSILDevExpress.XtraGauges.v14.1.Core14.1.8.0__b88d1754d700e49a 41 copy %pathdev%DevExpress.XtraGauges.v14.1.Core.dll %windir%assemblyGAC_MSILDevExpress.XtraGauges.v14.1.Core14.1.8.0__b88d1754d700e49a 42 43 gacutil -u "DevExpress.XtraGrid.v14.1" 44 mkdir %windir%assemblyGAC_MSILDevExpress.XtraGrid.v14.114.1.8.0__b88d1754d700e49a 45 copy %pathdev%DevExpress.XtraGrid.v14.1.dll %windir%assemblyGAC_MSILDevExpress.XtraGrid.v14.114.1.8.0__b88d1754d700e49a 46 47 gacutil -u "DevExpress.XtraLayout.v14.1" 48 mkdir %windir%assemblyGAC_MSILDevExpress.XtraLayout.v14.114.1.8.0__b88d1754d700e49a 49 copy %pathdev%DevExpress.XtraLayout.v14.1.dll %windir%assemblyGAC_MSILDevExpress.XtraLayout.v14.114.1.8.0__b88d1754d700e49a 50 51 gacutil -u "DevExpress.XtraNavBar.v14.1" 52 mkdir %windir%assemblyGAC_MSILDevExpress.XtraNavBar.v14.114.1.8.0__b88d1754d700e49a 53 copy %pathdev%DevExpress.XtraNavBar.v14.1.dll %windir%assemblyGAC_MSILDevExpress.XtraNavBar.v14.114.1.8.0__b88d1754d700e49a 54 55 gacutil -u "DevExpress.XtraPrinting.v14.1" 56 mkdir %windir%assemblyGAC_MSILDevExpress.XtraPrinting.v14.114.1.8.0__b88d1754d700e49a 57 copy %pathdev%DevExpress.XtraPrinting.v14.1.dll %windir%assemblyGAC_MSILDevExpress.XtraPrinting.v14.114.1.8.0__b88d1754d700e49a 58 59 gacutil -u "DevExpress.XtraReports.v14.1" 60 mkdir %windir%assemblyGAC_MSILDevExpress.XtraReports.v14.114.1.8.0__b88d1754d700e49a 61 copy %pathdev%DevExpress.XtraReports.v14.1.dll %windir%assemblyGAC_MSILDevExpress.XtraReports.v14.114.1.8.0__b88d1754d700e49a 62 63 gacutil -u "DevExpress.XtraTreeList.v14.1" 64 mkdir %windir%assemblyGAC_MSILDevExpress.XtraTreeList.v14.114.1.8.0__b88d1754d700e49a 65 copy %pathdev%DevExpress.XtraTreeList.v14.1.dll %windir%assemblyGAC_MSILDevExpress.XtraTreeList.v14.114.1.8.0__b88d1754d700e49a 66 67 gacutil -u "DevExpress.XtraVerticalGrid.v14.1" 68 mkdir %windir%assemblyGAC_MSILDevExpress.XtraVerticalGrid.v14.114.1.8.0__b88d1754d700e49a 69 copy %pathdev%DevExpress.XtraVerticalGrid.v14.1.dll %windir%assemblyGAC_MSILDevExpress.XtraVerticalGrid.v14.114.1.8.0__b88d1754d700e49a 70 71 echo '註冊完畢!'
腳本程式碼說明:color 1e :設置Dos運行窗口的背景色,無關緊要,不設置也可以。
title 註冊DEV控制項:設置Dos運行窗口的標題內容。
set "pathdev=%~dp0" :設置一個變數,存儲安裝時用戶選擇的安裝目錄。
gacutil -u "DevExpress.BonusSkins.v14.1":取消註冊dll。
mkdir %windir%assemblyGAC_MSILDevExpress.BonusSkins.v14.114.1.8.0__b88d1754d700e49a:創建文件夾
copy %pathdev%DevExpress.BonusSkins.v14.1.dll %windir%assemblyGAC_MSILDevExpress.BonusSkins.v14.114.1.8.0__b88d1754d700e49a
:複製文件到新生成的文件夾中。
上面共有16段相同的腳本,每一段註冊不同的dll。如果還需要其他的DLL,做法與上面一樣,拷貝一段,修改相關名稱即可。
(3)製作安裝包(省略前面步驟)添加初始文件
相關文件載入、設置完成後,最後的關鍵步驟是
點擊【資源】菜單》【初始文件】,彈出「資源」窗口,在「初始文件」選項卡中,添加以下文件:
「gacutil.exe」、「RegisterDevExpress14.1.8.bat」、以及程式中引用的DevExpress的相關DLL。如下圖:

雙擊任何一個DLL,查看其屬性,選中「當安裝程式退出時刪除」選項。這樣設置是:當安裝程式運行完成後(已經註冊了DevExpress的相關DLL),SetUpFactory工具會自動刪除這些DLL,在客戶端的安裝目錄中就不會存在這些DLL,目錄相對乾淨,程式運行時會依賴GAC中註冊的DLL而不會出錯。

(4)製作安裝包,添加輔助運行螢幕。
點擊【螢幕】菜單》【安裝之後】按鈕,彈出螢幕窗口。點擊下方的【添加】按鈕,添加一個「靜態文本」類型的螢幕。
選中並點擊螢幕下方的「向上箭頭」

將其移動到最頂端(結束螢幕之前)。

雙擊該螢幕,設置其相關屬性


在「操作」選項卡,「On Next」下一步選項卡中添加以下程式碼
-- 運行腳本,註冊DevExpress相關控制項。 Shell.Execute(SessionVar.Expand("%TempLaunchFolder%\RegisterDevExpress14.1.8.bat"), "open", "", "", SW_SHOWNORMAL, true);
該段程式碼要設置在Screen.Next(); 方法之前。這樣當點擊下一步按鈕的時候,先運行註冊腳本,運行完成後才真正進入到下一步安裝介面。

點擊「確定」按鈕,設置完成後,點擊"構建"按鈕,開始創建安裝包。

製作完成後,將安裝包拷貝到其他電腦上安裝測試。
點擊「下一步」,…………,最後出現「註冊Assembly螢幕」

點擊「下一步」按鈕,開始執行腳本文件,註冊DLL

註冊成功。

點擊「完成」按鈕安裝完成。桌面上生成程式快捷方式,如下圖:

雙擊程式快捷方式,運行程式,顯示效果如下圖:

程式運行正常。打開C:Windowsassembly,其中顯示了剛剛註冊的DevExpress的相關DLL

再到安裝目錄下查看,其中沒有發現DevExpress的相關DLL。而上圖中程式運行正常,說明程式依賴的DevExpress的相關DLL在GAC中。

本篇完。