pkg文件中判断目标系统的方法

      根据广大网友的经验,S60 3rd MR/FP1/FP2,S60 5th在系统中均有一些特征文件,表明了系统的实际版本,在某些应用场景下,目标机器的系统版本非常重要,以便于针对不同的系统部署不同的dll或exe,来适配更多的机型。

      目前最普遍的方式是判断Series60文件,描述如下:     

 

      z:/system/install/Series60v3.0.sis  :  S60 3rd MR

      z:/system/install/Series60v3.1.sis  :  S60 3rd FP1

      z:/system/install/Series60v3.2.sis  :  S60 3rd FP2

      z:/system/install/Series60v5.0.sis  :  S60 5th

 

      可以在pkg文件中,判断这些文件是否存在,以安装对应的dll或exe,示例如下:

 

IF (EXISTS("z:/system/install/Series60v3.2.sis"))
   "sys/bin/aa.dll"-"!:/sys/bin/aa.dll"
ELSEIF (EXISTS("z:/system/install/Series60v3.1.sis"))
   "sys/bin/aa(0-7).dll"-"!:/sys/bin/aa.dll"
ELSE
   "sys/bin/aa(0-8).dll"-"!:/sys/bin/aa.dll"
ENDIF

 

      该段说明如果是FP2则安装aa.dll库,如果是FP1则安装aa(0-7).dll库,MR则安装aa(0-8).dll库,其他的以此类推。

 

      在程序中可以用以下函数判断系统版本:

 

void CAppInfo::DeterminSystemVer() {
       
        iSystemVer = 30;       
        RFs fs;
        if( KErrNone != fs.Connect() ) { return; }
        TFindFile finder(fs);
        if( KErrNone == finder.FindByDir( _L("Series60v5.0.sis"), _L("z://system//install//") ) ){
                iSystemVer = 50;
        } else if( KErrNone == finder.FindByDir( _L("Series60v3.2.sis"), _L("z://system//install//") ) ){
                iSystemVer = 32;
        } else if( KErrNone == finder.FindByDir( _L("Series60v3.1.sis"), _L("z://system//install//") ) ){
                iSystemVer = 31;
        }       
        fs.Close();
}

 

剩下的,就由大家自由发挥了!

 

你可能感兴趣的:(pkg文件中判断目标系统的方法)