離第一篇文章有些日子了,由于我的失誤,不少朋友都沒(méi)看到圖片。在這期間,有不少朋友來(lái)信說(shuō),有沒(méi)有方法做一個(gè)桌面的安裝程序?運(yùn)行程序前, 必須還要裝其他程序(比如SqlMobile, .NetCompactFrameWork等等),有沒(méi)有方法能把它們做到一個(gè)安裝包中?
好, 讓我們開(kāi)始。首先, 讓我們看看有幾種方案。
其實(shí), 大家到網(wǎng)上隨便一艘就能搜到第一種方案,手把手教大家怎么做桌面安裝程序,這是直接用vs2005,不過(guò)我好像沒(méi)看到C++版的(全是vb.net和C#的)。
第二種方案就是利用現(xiàn)有的打包工具,這個(gè)我沒(méi)試過(guò);
第三種方案和第一種差不多。不過(guò)比第一種簡(jiǎn)單,都是先要寫(xiě)一個(gè)安裝的INI文件, 然后調(diào)用CEAppMgr.exe程序,把INI文件傳給它。不過(guò)這用方案不能定制自己的安裝界面。
而且,某些朋友還需要和自己程序安裝的時(shí)候同時(shí)安裝其他程序。最好的方法是,在用戶點(diǎn)擊我們桌面安裝程序的時(shí)候, 把所有的需要的程序都安裝好。
現(xiàn)在,我們來(lái)考慮解決以上問(wèn)題的方案。這種方案必須能滿足以下幾點(diǎn):
1) 安裝程序用vc++寫(xiě);
2) 能夠定制界面;
3) 能夠同時(shí)安裝多個(gè).cab程序;
首先,我們必須知道Win Mobile 上怎么安裝程序的。在Win Mobile 上,有個(gè)安裝程序的程序叫 wceload.exe,它的用法是:把你要安裝的程序包路徑傳給它做參數(shù)即可(有點(diǎn)必須注意:必須在你的參數(shù)字符串兩邊加上雙引號(hào),具體用法見(jiàn)demo)。為實(shí)現(xiàn)遠(yuǎn)程安裝, 我們可以先把安裝Cab包拷貝PDA上,然后遠(yuǎn)程調(diào)用安裝程序,實(shí)現(xiàn)安裝。
第二,既然我們想定制界面,做安裝程序最簡(jiǎn)單的就是用 CPropertySheet 和 CPropertyPage 。為了簡(jiǎn)單,我們?cè)赿emo中就采取這種方法;
第三,要實(shí)現(xiàn)多個(gè)cab安裝,也很簡(jiǎn)單。記得,我們?cè)谏掀恼轮杏浀媚莻€(gè)安裝DLL嗎?我們可以利用那個(gè)實(shí)現(xiàn)多個(gè)cab安裝。我們先可以把我們要安裝的包做為文件增加到的“應(yīng)用程序文件”項(xiàng),然后在dll中調(diào)用安裝程序進(jìn)行安裝。
OK, 現(xiàn)在這種方案都能滿足以上要求。大家思路有點(diǎn)印象沒(méi),如果還不清楚,請(qǐng)繼續(xù)跟我往下走。我們開(kāi)始寫(xiě)程序。
我們打開(kāi)vs2005, 新建一個(gè)基于MFC對(duì)話框程序名為SetupOnPC,注意選中靜態(tài)鏈接。我們就可以向其中加入我們要定制界面的CPropertySheet 和 CPropertyPage 的繼承類(lèi)。具體過(guò)程,我省略。請(qǐng)查看源碼。
我們要在 頭文件 stdafx.h 中加入 #include <rapi.h> //遠(yuǎn)程API頭文件, 其次還要把它們.H和.lib文件引用路徑加入到vs2005中。路徑為:安裝路徑\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Activesync\Inc(Lib)。
下面,我們開(kāi)始寫(xiě)代碼, 過(guò)程省略(請(qǐng)看源碼)。由于,我們需要把多個(gè)包一起安裝,所以我們要改進(jìn)上次寫(xiě)的CabSample的setupdll的代碼。主要是流程如下:先檢測(cè)已安裝的程序(組件),然后選擇未安裝的安裝。具體代碼參見(jiàn)demo。今天的例子,我們以sqlmobile為例,怎么讓它和我們一起安裝。鑒于,sqlmobile的安裝包名字太長(zhǎng), 我給它們重命名。(一共三個(gè),分別叫:SqlMobile1,SqlMobile2,SqlMobile3)。
OK , 全部結(jié)束。不懂的地方參見(jiàn)源碼,下面是運(yùn)行圖。

檢測(cè)PDA連接情況(未連上),如果點(diǎn)第二個(gè)框框再檢測(cè) 如下圖

檢測(cè)到后, 下一步才能繼續(xù), 如下圖

拷貝安裝文件

安裝成功, 如下圖

PC端,全部執(zhí)行完畢。你看你的pda或者模擬器已經(jīng)在安裝程序或者安裝好了。
到此,全過(guò)程結(jié)束。需要說(shuō)明下就是, 我們的程序最好選用靜態(tài)+release 編譯,生成的程序直接可以考到客戶PC運(yùn)行,無(wú)須再打包。另外,由于本程序用刀ce RAPI 所以,在我們的程序文件中,當(dāng)然要包括以下2個(gè)dll 文件:rapi.dll 和 ceutil.dll 。這兩個(gè)文件一般裝過(guò)ActinveSync就會(huì)在系統(tǒng)文件中有。另外,我們的程序文件夾中,要包括你要安裝的.cab文件。OK, 現(xiàn)在全部結(jié)束。由于,demo超過(guò)2 M大小,想要源碼的留下Email。
請(qǐng)大家到下面這個(gè)網(wǎng)址去下載demo吧
http://www.winbile.net/BBS/1016029/ShowPost.aspx