检测应用程序路径

来源:互联网 发布:美工论坛怎么注册 编辑:程序博客网 时间:2024/06/16 13:17

TSS001072

设备, 软件 版本: S60 2nd Edition
S60 3rd Edition
S60 3rd Edition, FP1
S60 3rd Edition, FP2

详细描述
终端用户将会选择将程序安装到C盘(手机存储)或E盘(存储卡或内置硬盘)中。程序有时需要知道自己的安装位置,对程序安装位置的判断取决于S60平台的版本。

解决方案
S60第二版
在S60第二版中,使用aknutils.h中的CompleteWithAppPath(TDes& aFileName)方法。这个方法将返回给定一个描述符,内有所有需要的组成部分(盘符,路径,包括后缀的文件名)。任何缺少的部分(路径和盘符)将从应用程序路径
(<drive>:/system/apps/<application_name> )中获取
#include <aknutils.h>
 
   // Insert the full application path into the file name (fileName)
   TFileName fullPath(fileName);
   CompleteWithAppPath(fullPath);    // from aknutils.h

S60第三版
从S60第三版向后,所有二进制程序(Exe和Dll文件)都存储在/Sys/bin中。要访问这个目录,程序需要AllFiles能力。资源和数据是无法存入这个目录的。程序有自己的目录/private/<SID>/各自安放,这里SID是一个安全标识,每个程序都是独一无二的。程序通过这个私有目录存放.ini,.mbm,.rsc和数据文件。其他没有AllFiles能力的程序将无法访问它们。

在S60第三版上CompleteWithAppPath()方法将总是返回/sys/bin作为程序安装目录。如果要访问程序的私有目录中的数据,将要用另一个方法来获得路径:
TFileName appPath;
  TBuf<2> appDrive;
  // Returns private path of this application
  // in following format: /Private/<SID of the application>/
  // (does not contain drive specification).
  iEikonEnv->FsSession().PrivatePath( appPath );
  // Extract drive letter into appDrive
  appDrive.Copy(iEikonEnv->EikAppUi()->Application()->AppFullName().Left(2));
  // Insert drive letter into path
  appPath.Insert(0, appDrive);