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

檢測PDA連接情況(未連上),如果點第二個框框再檢測 如下圖

檢測到后, 下一步才能繼續, 如下圖

拷貝安裝文件

安裝成功, 如下圖

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