首先必须使用非公开的API
http://wiki.forum.nokia.com/index.php/SDK_API_Plug-in
http://wiki.forum.nokia.com/index.php/Extended_Skins_API
Waydejiang 江小伟
一 需求分析:
由于项目中需要安装多个sisx包,但是又不想让用户看到安装了多个包,所以需要在安装1个sisx的时候,偷偷的安装上其他的sisx包。这样程序在后台可以用静默安装来完成这一特殊需求。
二 SDK能支持的。
Symbian sdk 其实提供了一组用程序来实现对 sisx或者其他类型的文件如(jar包)的安装的类。这些类属于symbian sdk plugin apis。
我们需要下载swinstapi. Swinstdefs.h swinstdefs.inl 三个头文件,以及swinstcli.lib 等3个库文件。
三 实现细节:
1. 类说明 :
本文主要说明 静默安装的实现。其实主要用到 3个类,依次是
SwiUI::RSWInstSilentLauncher
SwiUI:: TInstallOptions
SwiUI::TInstallOptionsPckg
SwiUI::RSWInstSilentLauncher 从名称看是1个R类,用法和其他的R类类似,先Connect,然后做自己感兴趣的事,完了后Close就可以了。静默安装这一过程实际上后台会启动1个服务程序,然后来完成app这边的安装请求。整个过程其实就是一个
Session的过程。这个类会有一些Install,UnInstall的方法,其中有同步的,也有异步的。根据需求,我们可以自己选择,我这里用的是同步的调用方式。
SwiUI::TInstallOptions 这个类主要描述安装时的一些参数。也是用户可定制的。
SwiUI::TInstallOptions 安装的选项配置类 ,主要包含以下成员。
变量类型 | 成员变量名 | 含义 |
TPolicy | iUpgrade | 是否覆盖安装 |
TPolicy | iOptionalItems | 可选配置项 |
TPolicy | iOCSP | 是否检查网络的签名认证状态 |
TPolicy | iIgnoreOCSPWarnings | 发生OCSP警告时是否继续安装 |
TPolicy | iUntrusted | 是否安装未签名的程序 |
TPolicy | iPackageInfo | 是否省略包的信息 |
TPolicy | iCapabilities | 是否自动给用户能力 |
TPolicy | iKillApp | 安装完成后是否删除源安装程序 |
TPolicy | iOverwrite | 是否允许覆盖原文件 |
TPolicy | iDownload | 是否可下载 |
TBuf | iLogin | 下载用户名,最大长度KSWInstMaxUserNameLength |
TBuf | iPassword
| 下载密码,最大长度KSWInstMaxPasswordLength |
TChar | iDrive | 安装的目标驱动器 |
TLanguage | iLang | 选择的语言 |
TBool | iUsePhoneLang | 强制使用手机上的默认语言 |
TPolicy | iUpgradeData | 是否更新所有数据 |
SwiUI::TInstallOptionsPckg 这个类就是将上述配置信息真正应用的1个类。
2. 技术关键点:
前面谈到 SwiUI::RSWInstSilentLauncher 会有一组方法,包含异步实现如
IMPORT_C void SilentInstall ( TRequestStatus & aReqStatus,
const TDesC & aFileName,
const TDesC8 & aOptions );
也包含同步实现如
IMPORT_C TInt SilentInstall ( RFile & aFile, const TDesC8 & aOptions );
因为我们要安装2个sisx,所以采用了同步的接口。若用异步的接口,也可以用CActiveWaitSheduler来实现伪同步。
这个函数调用时可能返回 KSWInstErrBusy 的错误,说明在调用这个接口的时候,可能要等后台服务程序处理完。所以加入延时等待逻辑。
的代码。
3.其他:
我们在调用这个函数前,需要先设置下 iOptionsPckg ,也就是前面提到的安装设置项,这个具体信息可以参考前面的表格。另外path是根据安装进程所在全路径获得,我们可以根据如下代码得到。
TFileName exePath ;
RProcess process ;
//get qsinstall.exe 's full path
exePath = process. FileName () ;
TParse parse ;
parse. Set (exePath, NULL , NULL ) ;
aDrive. Zero () ;
aDrive. Append (parse. Drive ());
四. 后记
本文只讨论了静默安装,其实这组类还可以实现静默卸载,即 SwiUI :: RSWInstLauncher