静默安装

    技术2022-05-20  63

    首先必须使用非公开的API

     

    "SDK API Plug-in" http://wiki.forum.nokia.com/index.php/SDK_API_Plug-in "Wiki: Extended Skins API" http://wiki.forum.nokia.com/index.php/Extended_Skins_API 下面是安装,可以同步,也可以异步,下面这个是同步,异步的话还要自己写一个AO。         // Silent Installer SwiUI::RSWInstSilentLauncher iLauncher;  //Install Option SwiUI::TInstallOptions iOptions; //Installation Option pkg SwiUI::TInstallOptionsPckg iOptionsPckg;  iOptions.iUpgrade = SwiUI::EPolicyAllowed; iOptions.iOCSP = SwiUI::EPolicyAllowed; iOptions.iDrive = 'C';    iOptions.iUntrusted = SwiUI::EPolicyAllowed;  iOptions.iCapabilities = SwiUI::EPolicyAllowed;  iOptionsPckg = iOptions;    TBufC<50> FName(KTempPath);//需要安装的SIS文件路径   //Silent insatllation iLauncher.Connect(); iLauncher.SilentInstall(/*waiter->iStatus,8*/FName,iOptionsPckg); iLauncher.Close();   GetSinkInfo(); CAknInformationNote* informationNote; informationNote = new ( ELeave ) CAknInformationNote; informationNote->ExecuteLD( _L("SilentInstall ok!!")); 下面是卸载 SwiUI::RSWInstLauncher iLauncher; CleanupClosePushL(iLauncher); User::LeaveIfError(iLauncher.Connect());  SwiUI::TUninstallOptions iUninstallOptions;         iUninstallOptions.iKillApp = SwiUI::EPolicyAllowed; iUninstallOptions.iBreakDependency = SwiUI::EPolicyAllowed; SwiUI::TUninstallOptionsPckg iUninstallOptionsPckg(iUninstallOptions);         iLauncher.SilentUninstall(TUid::Uid(0xA00000EB),iUninstallOptionsPckg,SwiUI::KSisxMimeType); CleanupStack::PopAndDestroy( &iLauncher ); iEikonEnv->InfoMsg( _L("SilentUninstall ok") ); 同样卸载也可以 同步或异步 版权声明 :转载时请以超链接形式标明文章原始出处和作者信息及 本声明 http://f6adf6ad.blogbus.com/logs/70969317.html Symbian 静默安装实现之分享

                              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

     


    最新回复(0)