使用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:\Windows\assembly\看到目前計算機上安裝的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%\assembly\GAC_MSIL\DevExpress.BonusSkins.v14.1\14.1.8.0__b88d1754d700e49a 9 copy %pathdev%DevExpress.BonusSkins.v14.1.dll %windir%\assembly\GAC_MSIL\DevExpress.BonusSkins.v14.1\14.1.8.0__b88d1754d700e49a 10 11 gacutil -u "DevExpress.Data.v14.1" 12 mkdir %windir%\assembly\GAC_MSIL\DevExpress.Data.v14.1\14.1.8.0__b88d1754d700e49a 13 copy %pathdev%DevExpress.Data.v14.1.dll %windir%\assembly\GAC_MSIL\DevExpress.Data.v14.1\14.1.8.0__b88d1754d700e49a 14 15 gacutil -u "DevExpress.DataAccess.v14.1" 16 mkdir %windir%\assembly\GAC_MSIL\DevExpress.DataAccess.v14.1\14.1.8.0__b88d1754d700e49a 17 copy %pathdev%DevExpress.DataAccess.v14.1.dll %windir%\assembly\GAC_MSIL\DevExpress.DataAccess.v14.1\14.1.8.0__b88d1754d700e49a 18 19 gacutil -u "DevExpress.Images.v14.1" 20 mkdir %windir%\assembly\GAC_MSIL\DevExpress.Images.v14.1\14.1.8.0__b88d1754d700e49a 21 copy %pathdev%DevExpress.Images.v14.1.dll %windir%\assembly\GAC_MSIL\DevExpress.Images.v14.1\14.1.8.0__b88d1754d700e49a 22 23 gacutil -u "DevExpress.Printing.v14.1.Core" 24 mkdir %windir%\assembly\GAC_MSIL\DevExpress.Printing.v14.1.Core\14.1.8.0__b88d1754d700e49a 25 copy %pathdev%DevExpress.Printing.v14.1.Core.dll %windir%\assembly\GAC_MSIL\DevExpress.Printing.v14.1.Core\14.1.8.0__b88d1754d700e49a 26 27 gacutil -u "DevExpress.Utils.v14.1" 28 mkdir %windir%\assembly\GAC_MSIL\DevExpress.Utils.v14.1\14.1.8.0__b88d1754d700e49a 29 copy %pathdev%DevExpress.Utils.v14.1.dll %windir%\assembly\GAC_MSIL\DevExpress.Utils.v14.1\14.1.8.0__b88d1754d700e49a 30 31 gacutil -u "DevExpress.XtraBars.v14.1" 32 mkdir %windir%\assembly\GAC_MSIL\DevExpress.XtraBars.v14.1\14.1.8.0__b88d1754d700e49a 33 copy %pathdev%DevExpress.XtraBars.v14.1.dll %windir%\assembly\GAC_MSIL\DevExpress.XtraBars.v14.1\14.1.8.0__b88d1754d700e49a 34 35 gacutil -u "DevExpress.XtraEditors.v14.1" 36 mkdir %windir%\assembly\GAC_MSIL\DevExpress.XtraEditors.v14.1\14.1.8.0__b88d1754d700e49a 37 copy %pathdev%DevExpress.XtraEditors.v14.1.dll %windir%\assembly\GAC_MSIL\DevExpress.XtraEditors.v14.1\14.1.8.0__b88d1754d700e49a 38 39 gacutil -u "DevExpress.XtraGauges.v14.1.Core" 40 mkdir %windir%\assembly\GAC_MSIL\DevExpress.XtraGauges.v14.1.Core\14.1.8.0__b88d1754d700e49a 41 copy %pathdev%DevExpress.XtraGauges.v14.1.Core.dll %windir%\assembly\GAC_MSIL\DevExpress.XtraGauges.v14.1.Core\14.1.8.0__b88d1754d700e49a 42 43 gacutil -u "DevExpress.XtraGrid.v14.1" 44 mkdir %windir%\assembly\GAC_MSIL\DevExpress.XtraGrid.v14.1\14.1.8.0__b88d1754d700e49a 45 copy %pathdev%DevExpress.XtraGrid.v14.1.dll %windir%\assembly\GAC_MSIL\DevExpress.XtraGrid.v14.1\14.1.8.0__b88d1754d700e49a 46 47 gacutil -u "DevExpress.XtraLayout.v14.1" 48 mkdir %windir%\assembly\GAC_MSIL\DevExpress.XtraLayout.v14.1\14.1.8.0__b88d1754d700e49a 49 copy %pathdev%DevExpress.XtraLayout.v14.1.dll %windir%\assembly\GAC_MSIL\DevExpress.XtraLayout.v14.1\14.1.8.0__b88d1754d700e49a 50 51 gacutil -u "DevExpress.XtraNavBar.v14.1" 52 mkdir %windir%\assembly\GAC_MSIL\DevExpress.XtraNavBar.v14.1\14.1.8.0__b88d1754d700e49a 53 copy %pathdev%DevExpress.XtraNavBar.v14.1.dll %windir%\assembly\GAC_MSIL\DevExpress.XtraNavBar.v14.1\14.1.8.0__b88d1754d700e49a 54 55 gacutil -u "DevExpress.XtraPrinting.v14.1" 56 mkdir %windir%\assembly\GAC_MSIL\DevExpress.XtraPrinting.v14.1\14.1.8.0__b88d1754d700e49a 57 copy %pathdev%DevExpress.XtraPrinting.v14.1.dll %windir%\assembly\GAC_MSIL\DevExpress.XtraPrinting.v14.1\14.1.8.0__b88d1754d700e49a 58 59 gacutil -u "DevExpress.XtraReports.v14.1" 60 mkdir %windir%\assembly\GAC_MSIL\DevExpress.XtraReports.v14.1\14.1.8.0__b88d1754d700e49a 61 copy %pathdev%DevExpress.XtraReports.v14.1.dll %windir%\assembly\GAC_MSIL\DevExpress.XtraReports.v14.1\14.1.8.0__b88d1754d700e49a 62 63 gacutil -u "DevExpress.XtraTreeList.v14.1" 64 mkdir %windir%\assembly\GAC_MSIL\DevExpress.XtraTreeList.v14.1\14.1.8.0__b88d1754d700e49a 65 copy %pathdev%DevExpress.XtraTreeList.v14.1.dll %windir%\assembly\GAC_MSIL\DevExpress.XtraTreeList.v14.1\14.1.8.0__b88d1754d700e49a 66 67 gacutil -u "DevExpress.XtraVerticalGrid.v14.1" 68 mkdir %windir%\assembly\GAC_MSIL\DevExpress.XtraVerticalGrid.v14.1\14.1.8.0__b88d1754d700e49a 69 copy %pathdev%DevExpress.XtraVerticalGrid.v14.1.dll %windir%\assembly\GAC_MSIL\DevExpress.XtraVerticalGrid.v14.1\14.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%\assembly\GAC_MSIL\DevExpress.BonusSkins.v14.1\14.1.8.0__b88d1754d700e49a:創建文件夾
copy %pathdev%DevExpress.BonusSkins.v14.1.dll %windir%\assembly\GAC_MSIL\DevExpress.BonusSkins.v14.1\14.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:\Windows\assembly,其中顯示了剛剛注冊的DevExpress的相關DLL
再到安裝目錄下查看,其中沒有發現DevExpress的相關DLL。而上圖中程序運行正常,說明程序依賴的DevExpress的相關DLL在GAC中。
本篇完。