离第一篇文章有些日子了,由于我的失误,不少朋友都没看到图片。在这期间,有不少朋友来信说,有没有方法做一个桌面的安装程序?运行程序前, 必须还要装其他程序(比如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, 现在全部结束。