根据广大网友的经验,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();
}
剩下的,就由大家自由发挥了!