程序的安裝和部署
摘要 本文先來(lái)介紹安裝和部署前的準(zhǔn)備,然后用向?qū)?chuàng)建一個(gè)安裝和部署項(xiàng)目,并修改項(xiàng)目的屬性,最后討論如何使用自己的標(biāo)題圖像、添加"序列號(hào)"對(duì)話(huà)框及生成程序菜單項(xiàng)和桌面圖標(biāo)。
安裝和部署前的準(zhǔn)備
一旦應(yīng)用程序項(xiàng)目開(kāi)發(fā)好了之后,就要?jiǎng)?chuàng)建一個(gè)安裝程序供用戶(hù)進(jìn)行安裝。早期的安裝程序大多數(shù)是使用InstallShield來(lái)制作的,InstallShield一個(gè)最大的特點(diǎn)是可以使用其內(nèi)嵌的腳本語(yǔ)言InstallScript來(lái)定制自己的安裝過(guò)程和安裝界面。不過(guò),現(xiàn)在我們還有一個(gè)更簡(jiǎn)便的選擇,那就是使用Visual Studio .net來(lái)創(chuàng)建程序安裝和部署項(xiàng)目。
在將程序發(fā)布之前,我們需要將應(yīng)用程序項(xiàng)目生成進(jìn)行重新配置,即將原來(lái)默認(rèn)的Debug(調(diào)試)版本變成了Release(發(fā)布)版本。具體步驟如下:
(1) 啟動(dòng)Visual Studio .NET,打開(kāi)上一講的單文檔應(yīng)用程序項(xiàng)目Viewer。
(2) 打開(kāi)"生成"菜單,單擊"配置管理器",彈出對(duì)話(huà)框。
(3) 在"活動(dòng)的解決方案配置"中選擇"Release",結(jié)果如圖1所示。
圖1 "配置管理器"對(duì)話(huà)框
(4) 單擊"關(guān)閉"按鈕。打開(kāi)"生成"菜單,單擊"生成解決方案"。生成完后,關(guān)閉該解決方案。
需要說(shuō)明的是,在用MFC應(yīng)用程序向?qū)?chuàng)建的項(xiàng)目中,可以有Win32 Debug和Win32 Release兩個(gè)版本。這兩個(gè)版本的區(qū)別是:Debug版本的運(yùn)行程序有相應(yīng)的調(diào)試信息代碼,而Release版本的運(yùn)行程序則沒(méi)有,但Release版本的運(yùn)行程序經(jīng)過(guò)代碼的優(yōu)化,其程序的運(yùn)行速度被最大加速。因此一般來(lái)說(shuō),當(dāng)用戶(hù)在將開(kāi)發(fā)的應(yīng)用程序發(fā)布給用戶(hù)之前,應(yīng)將項(xiàng)目調(diào)試后將其編譯成Win32 Release版本。編譯和生成后的有關(guān)文件被放置在項(xiàng)目名文件夾下的Release子文件夾中。對(duì)于Debug版本,其編譯和生成后的有關(guān)文件被放置在Debug子文件夾中。
創(chuàng)建一個(gè)安裝和部署的項(xiàng)目
Visual Studio
.net不僅提供了創(chuàng)建基于
Windows 或基于
Web的應(yīng)用程序和組件的安裝程序的工具,也提供了創(chuàng)建用于
下載的.Cab 文件的工具。與InstallShield不同的是,Visual Studio.NET使用Microsoft Windows Installer來(lái)提供程序安裝和配置的功能。
Visual Studio.NET為用戶(hù)安裝和部署項(xiàng)目提供四種類(lèi)型的模板:合并模塊項(xiàng)目、安裝項(xiàng)目、Web 安裝項(xiàng)目和 Cab 項(xiàng)目。此外還提供了兩個(gè)安裝程序向?qū)?,可幫助我們完成?chuàng)建部署項(xiàng)目的過(guò)程。下面我們使用安裝向?qū)?lái)創(chuàng)建一個(gè)安裝項(xiàng)目。
(1) 打開(kāi)"文件"菜單,選擇"新建"->"項(xiàng)目",彈出"新建項(xiàng)目"對(duì)話(huà)框。
(2) 單擊左側(cè)的項(xiàng)目類(lèi)型"安裝和部署項(xiàng)目",選擇右側(cè)的"安裝向?qū)?模板,輸入項(xiàng)目名稱(chēng)"ViewerSetup",指定一個(gè)項(xiàng)目位置,如圖2所示。
圖2 "新建項(xiàng)目"對(duì)話(huà)框
(3) 單擊"確定"按鈕,出現(xiàn)如圖3所示的對(duì)話(huà)框。
圖3 向?qū)?第1步"對(duì)話(huà)框
(4) 單擊"下一步"按鈕,出現(xiàn)如圖4所示的對(duì)話(huà)框。這里,可以選擇安裝項(xiàng)目類(lèi)型以及重新發(fā)布的打包類(lèi)型。
圖4 向?qū)?第2步"對(duì)話(huà)框
(5) 保留默認(rèn)的選項(xiàng),單擊"下一步"按鈕,出現(xiàn)向?qū)?第3步"對(duì)話(huà)框。單擊"添加"按鈕,在彈出的"添加文件"對(duì)話(huà)框中,將前面的Viewer應(yīng)用程序可執(zhí)行文件添加進(jìn)來(lái),結(jié)果如圖5所示。
圖5 向?qū)?第3步"對(duì)話(huà)框
(6) 單擊"下一步"按鈕,出現(xiàn)如圖6所示的對(duì)話(huà)框,顯示出我們?cè)谇懊鎺讉€(gè)步驟中作出的選擇內(nèi)容。
圖6 向?qū)?第4步"對(duì)話(huà)框
(7) 單擊"完成"按鈕,系統(tǒng)開(kāi)始創(chuàng)建。需要說(shuō)明的是,單擊"上一步"按鈕可對(duì)前面的操作進(jìn)行修改。
(8) 打開(kāi)"項(xiàng)目",選擇"添加"->"合并模塊",選定用于MFC應(yīng)用程序本地化支持的兩個(gè)模塊,一個(gè)是MFC_Loc_FE.msm(東南亞地方)和
VC_MFC.msm(MFC的支持),單擊"打開(kāi)"按鈕。
生成和測(cè)試 (1) 打開(kāi)"生成"菜單,單擊"生成
解決方案",系統(tǒng)就會(huì)在指定項(xiàng)目位置下的"ViewerSetup\Debug"中為該安裝項(xiàng)目生成一個(gè)ViewerSetup.msi安裝文件。
(2) 在解決方案資源管理器中,右擊頂層節(jié)點(diǎn)"ViewerSetup",從彈出的快捷菜單中單擊"安裝",啟動(dòng)
Windows Installer,進(jìn)行應(yīng)用程序的安裝過(guò)程。開(kāi)始出現(xiàn)的是安裝"歡迎"對(duì)話(huà)框,如圖7所示。
圖7 "歡迎"對(duì)話(huà)框
(3) 單擊"下一步"按鈕,進(jìn)入"選擇安裝文件夾"對(duì)話(huà)框,如圖8所示。
圖8 "選擇安裝文件夾"對(duì)話(huà)框
(4) 單擊"下一步"按鈕,進(jìn)入"確認(rèn)安裝"對(duì)話(huà)框,如圖9所示。
圖9 "確認(rèn)安裝"對(duì)話(huà)框
(5) 單擊"下一步"按鈕,系統(tǒng)開(kāi)始安裝,并顯示安裝進(jìn)度,最后顯示安裝完成對(duì)話(huà)框,如圖10所示。
圖10 "安裝完成"對(duì)話(huà)框
(6) 單擊"關(guān)閉"按鈕,退出安裝。這就是ViewerSetup默認(rèn)的安裝過(guò)程。
修改項(xiàng)目屬性
(1) 在
解決方案資源管理器中,單擊頂層目錄的"ViewerSetup"。在屬性窗口中出現(xiàn)如圖11所示的屬性。
圖11 項(xiàng)目屬性
具體屬性含義可參見(jiàn)MSDN中的說(shuō)明,需要注意的是:
1、為保證UpgradeCode、PackageCode和ProductCode三種屬性值的唯一性,最好保留其默認(rèn)值。
2、在
Windows資源管理器中選定某安裝程序文件(.msi),右擊鼠標(biāo),從彈出的快捷菜單中選擇"屬性"命令,則Author、Description、Keywords和Subject等屬性顯示在其屬性對(duì)話(huà)框的"摘要"標(biāo)簽頁(yè)上。而在應(yīng)用程序安裝后,屬性Author、Description、Manufacturer、ManufacturerUrl、SupportPhone和SupportUrl顯示在"支持信息"對(duì)話(huà)框中,如圖12所示,該內(nèi)容可從系統(tǒng)的"添加/刪除程序"對(duì)話(huà)框中相應(yīng)程序的"查看支持信息"得到。
圖12 "支持信息"對(duì)話(huà)框
(2) 在屬性窗口中,將Author屬性?xún)?nèi)容改為"丁有和"。Author用來(lái)指定應(yīng)用程序或組件的作者名或聯(lián)系人。
(3) 將Manufacturer屬性?xún)?nèi)容改為"計(jì)算機(jī)編程維護(hù)與技巧 雜志社"。Manufacturer用來(lái)指定應(yīng)用程序或組件的開(kāi)發(fā)公司或發(fā)行商。
(4) 將ManufacturerUrl屬性?xún)?nèi)容改為"www.comprg.com.cn",ManufacturerUrl用來(lái)指定Manufacturer的網(wǎng)址。
(5) 將ProductName屬性?xún)?nèi)容改為" 文本瀏覽器 "(注意文本前后要留有空格)。ProductName用來(lái)指定在目標(biāo)計(jì)算機(jī)上安裝應(yīng)用程序或組件時(shí)用于描述該應(yīng)用程序或組件的公共名稱(chēng)。默認(rèn)為部署項(xiàng)目的名稱(chēng)。
(6) 將Subject屬性?xún)?nèi)容設(shè)為"文本瀏覽器"。Subject用來(lái)指定在目標(biāo)計(jì)算機(jī)上安裝應(yīng)用程序或組件時(shí)用于描述該應(yīng)用程序或組件的其他信息。
(7) 將Title屬性?xún)?nèi)容改為"文本瀏覽器"。Title用來(lái)指定安裝程序的標(biāo)題。默認(rèn)情況下,Title屬性與部署項(xiàng)目的名稱(chēng)相同。
(8) 右擊解決方案管理器頂層目錄ViewerSetup,從彈出的快捷菜單中選擇"重命名",鍵入"文本瀏覽器 安裝"后按Enter鍵。
(9) 打開(kāi)"生成"菜單,單擊"重新生成解決方案"。
(10) 打開(kāi)"項(xiàng)目"菜單,單擊"安裝",看看出現(xiàn)的界面的變化。
使用自己的標(biāo)題圖像 "標(biāo)題圖像"是用來(lái)顯示在安裝對(duì)話(huà)框中的位于標(biāo)題欄下方的圖像,它是寬度為 500 像素、高度為 70 像素的位圖。下面就來(lái)改變對(duì)話(huà)框中的安裝標(biāo)題圖像。
(1) 打開(kāi)
Windows中的"畫(huà)圖"工具,并將其圖像大小設(shè)置為500 x 70。
(2) 在最右側(cè)添加一個(gè)用于產(chǎn)品標(biāo)識(shí)的圖像(自己構(gòu)造),結(jié)果如圖13所示,將該位圖保存到Banner.bmp文件中。
圖13 制作標(biāo)題位圖
(3) 在Visual Studio
.net中,打開(kāi)"項(xiàng)目"菜單,選擇"添加"->"文件",將剛才創(chuàng)建的Banner.bmp文件添加當(dāng)前安裝項(xiàng)目中。
(4) 打開(kāi)"視圖"菜單,選擇"編輯器"->"用戶(hù)界面",在窗口中顯示出"用戶(hù)界面"編輯器,如圖14所示。
圖14 "用戶(hù)界面"編輯器
在"用戶(hù)界面"編輯器中,安裝過(guò)程中所出現(xiàn)的對(duì)話(huà)框均在這里以"樹(shù)視圖"形式顯示出來(lái)。用戶(hù)界面分為"一般安裝"和"管理員安裝"兩大類(lèi)。"一般安裝"用于最終用戶(hù)運(yùn)行安裝程序時(shí)將顯示的對(duì)話(huà)框,"管理員安裝"部分用于系統(tǒng)管理員將安裝程序上載到網(wǎng)絡(luò)位置時(shí)將顯示的對(duì)話(huà)框。
(5) 單擊"歡迎使用",將在屬性窗口中出現(xiàn)這個(gè)對(duì)話(huà)框的屬性,其中BannerBitmap屬性用來(lái)指定對(duì)話(huà)框的標(biāo)題圖像的。
(6) 在屬性窗口中,單擊BannerBitmap屬性欄右側(cè)的下拉按鈕,從彈出的列表中選擇"(瀏覽…)",出現(xiàn)如圖15所示的對(duì)話(huà)框。
圖15 "選擇項(xiàng)目中的項(xiàng)"對(duì)話(huà)框
(7) 雙擊"應(yīng)用程序文件夾",出現(xiàn)前面添加的標(biāo)題圖像文件Banner.bmp,選中它,單擊"確定"按鈕。這樣,該對(duì)話(huà)框的標(biāo)題圖像就設(shè)置好了。類(lèi)似的,還可以為其他所有的對(duì)話(huà)框進(jìn)行設(shè)置。
(8) 重新生成并安裝,結(jié)果出現(xiàn)的"歡迎使用"對(duì)話(huà)框如圖16所示。
圖16 定制后的"歡迎使用"對(duì)話(huà)框
添加"序列號(hào)"驗(yàn)證對(duì)話(huà)框
程序安裝時(shí)往往需要序列號(hào)為限制非法安裝,下面就來(lái)實(shí)現(xiàn)。
(1) 在"用戶(hù)界面"編輯器中,右擊"安裝"下的"啟動(dòng)"節(jié)點(diǎn),從彈出的快捷菜單中選擇"添加對(duì)話(huà)框",出現(xiàn)如圖17所示的對(duì)話(huà)框。
圖17 "添加對(duì)話(huà)框"
(2) 由于"序列號(hào)"是產(chǎn)品的一種客戶(hù)信息,因此我們單擊"客戶(hù)信息",然后單擊"確定"按鈕。
(3) 在"用戶(hù)界面"編輯器中,將"客戶(hù)信息"節(jié)點(diǎn)拖放到"歡迎使用"與"安裝文件夾"之間。
(4) 在"客戶(hù)信息"屬性窗口中,將BannerBitmap屬性修改為"Banner.bmp"。
(5) 將SerialNumberTemplate屬性修改成"<?????-?????>"。SerialNumberTemplate屬性決定文本框在對(duì)話(huà)框中的顯示方式,并確定是僅對(duì)序列號(hào)的格式進(jìn)行驗(yàn)證,還是按照
Windows 安裝程序算法對(duì)序列號(hào)進(jìn)行驗(yàn)證。SerialNumberTemplate屬性的有效可編輯字符可以是"#?%^<>",其中#表示要求輸入一個(gè)數(shù)字,該數(shù)字將不包括在驗(yàn)證算法中。%表示要求輸入一個(gè)數(shù)字,該數(shù)字將包括在驗(yàn)證算法中。?表示要求輸入一個(gè)字母數(shù)字字符,該字符將不包括在驗(yàn)證算法中。^表示要求輸入一個(gè)大寫(xiě)字母或一個(gè)數(shù)字。<和>表示該字符左邊或右邊的所有字符在對(duì)話(huà)框中都不可見(jiàn)。
(6) 將ShowSerialNumber屬性設(shè)置為T(mén)rue,結(jié)果如圖18所示。
圖18 修改的"客戶(hù)信息"屬性
(7) 這樣,重新生成安裝后,出現(xiàn)如圖19所示的"客戶(hù)信息"對(duì)話(huà)框。
圖19 "客戶(hù)信息"對(duì)話(huà)框
需要說(shuō)明的是,若自己驗(yàn)證序列號(hào),也就是說(shuō)序列號(hào)等于某個(gè)字符串,則需要進(jìn)行自定義操作。由于自定義操作需要更多的底層代碼,因此這里不作討論。
生成程序菜單項(xiàng)和桌面圖標(biāo) 在
Windows中運(yùn)行程序的最常用快捷方式是在程序中創(chuàng)建菜單項(xiàng)或在桌面中創(chuàng)建快捷圖標(biāo)。下面就來(lái)創(chuàng)建。
1. 生成程序菜單項(xiàng)
(1) 在"文件系統(tǒng)"編輯器中,右擊"用戶(hù)的‘程序‘菜單",彈出快捷菜單,將鼠標(biāo)指針指向菜單中的"添加",彈出子菜單,單擊子菜單中的"文件夾"。將該文件夾名稱(chēng)改為"文本瀏覽器"。
(2) 單擊"文本瀏覽器",在右側(cè)列表視圖窗口處右擊鼠標(biāo),彈出快捷菜單,單擊"創(chuàng)建新的快捷方式"。彈出如前面的圖15所示的"選擇項(xiàng)目中的項(xiàng)"對(duì)話(huà)框。
(3) 在對(duì)話(huà)框中,雙擊"應(yīng)用程序文件夾",然后單擊"Viewer.exe",單擊"確定"按鈕。
(4) 單擊創(chuàng)建的快捷方式"Viewer.exe 的快捷方式",在屬性窗口中將Name屬性改成"運(yùn)行 文本瀏覽器"。
(5) 在屬性窗口中,單擊Icon屬性右則的下拉按鈕,從中選擇"(瀏覽…)",在彈出的"圖標(biāo)"對(duì)話(huà)框中,單擊"瀏覽"按鈕,在"選擇項(xiàng)目中的項(xiàng)"對(duì)話(huà)框中,選中"應(yīng)用程序文件夾"后,單擊右側(cè)的"添加文件",將Viewer項(xiàng)目文件夾中的Viewer.ico文件添加。
(6) 單擊Viewer.ico,再單擊"確定"按鈕。此時(shí)"圖標(biāo)"對(duì)話(huà)框如圖20所示。
圖20 "圖標(biāo)"對(duì)話(huà)框
(7) 單擊"當(dāng)前圖標(biāo)"中的圖標(biāo),然后單擊"確定"按鈕,這里屬性窗口中的屬性變成如圖21所示的內(nèi)容。
圖21 修改后的程序快捷方式屬性
需要說(shuō)明的是:
Arguments屬性用來(lái)為所選的自定義操作指定命令行參數(shù)。僅適用于.exe自定義操作。
ShowCmd屬性用來(lái)為通過(guò)快捷方式啟動(dòng)的應(yīng)用程序指定窗口狀態(tài)(正常vsdscNormal、最小化vsdscMinimized或最大化vsdscMaximized)。
Target屬性用來(lái)指定目標(biāo)計(jì)算機(jī)上由快捷方式啟動(dòng)的應(yīng)用程序的路徑和文件名。
Transitive屬性用來(lái)確定在目標(biāo)計(jì)算機(jī)上安裝或重新安裝應(yīng)用程序或組件時(shí),安裝程序是否重新計(jì)算選定的文件夾、文件、
注冊(cè)表鍵或注冊(cè)表值的Condition屬性。此屬性是一項(xiàng)高級(jí)功能,應(yīng)謹(jǐn)慎使用,一般使用其默認(rèn)值False。
WorkingFolder屬性用來(lái)指定文件夾的名稱(chēng),在目標(biāo)計(jì)算機(jī)上的該文件夾中安裝選定快捷方式的目標(biāo)應(yīng)用程序。
(8) 在左側(cè)單擊"文本瀏覽器",將其AlwaysCreate屬性設(shè)為T(mén)rue。
(9) 重新生成安裝后,在"開(kāi)始"菜單中的"所有程序中"中出現(xiàn)如圖22所示的程序菜單。
圖22 安裝后的程序菜單項(xiàng)
2. 創(chuàng)建桌面圖標(biāo)
(1) 在"文件系統(tǒng)"編輯器中,單擊"用戶(hù)桌面",將其AlwaysCreate屬性設(shè)為T(mén)rue。
(2) 在編輯器的右側(cè)窗口處,右擊鼠標(biāo),從彈出快捷菜單中選擇"創(chuàng)建新的快捷方式"。彈出如前面的圖15所示的"選擇項(xiàng)目中的項(xiàng)"對(duì)話(huà)框。
(3) 在對(duì)話(huà)框中,雙擊"應(yīng)用程序文件夾",然后單擊"Viewer.exe",單擊"確定"按鈕。
(4) 單擊創(chuàng)建的快捷方式"Viewer.exe 的快捷方式",在屬性窗口中將Name屬性改成"文本瀏覽器"。
(5) 單擊"文本瀏覽器"。在屬性窗口中,將Icon屬性設(shè)為Viewer.ico文件中的圖標(biāo)。
(6) 重新生成并安裝。
結(jié)束語(yǔ) 本講重點(diǎn)討論了程序的安裝和部署,一旦安裝項(xiàng)目制作好以后就可以在項(xiàng)目文件夾下Debug中的文件制成安裝盤(pán)。在本講座中,我們領(lǐng)略了用Visual
C++ .net進(jìn)行應(yīng)用程序開(kāi)發(fā)的一般過(guò)程,從中可以發(fā)現(xiàn)其功能的強(qiáng)大,當(dāng)然要想更加深入地使用該工具,還應(yīng)在實(shí)踐中不斷磨練。不過(guò),這里還有強(qiáng)調(diào)的是,一定要用Visual C++ .NET做一個(gè)項(xiàng)目。(全文完)