在symbian系统中实现程序自启动有两种方法
(1) 通过资源文件来注册
适用范围:S60 3rd, 5th
推荐
假设你的自启动应用程序的UID3为:
ef37946b
1.1 在data下新建一个rss文件,取名为 [
ef37946b].rss
(必须要加上[]),并且只能将这个rss生成的rsc文件打包进自启动程序的sis文件来进行安装才会使本程序自启动成功。
写入如下内容:
#include <startupitem.rh>
RESOURCE STARTUP_ITEM_INFO auto_startup_info
{
executable_name = "!://sys//bin//MyAutoStart.exe";
recovery = EStartupItemExPolicyNone;
}
// 此处的MyAutoStart.exe是你的应用程序文件名。
1.2 在mmp文件中增加以下代码
SOURCEPATH ../data
START RESOURCE [ef37946b].rss /* 此mmp文件所编译的可执行程序的UID3必须也为ef37946b,否则自启动不会成功。*/
TARGETPATH /private/101f875a/import // 生成的rsc文件名必须要是 "[FFFFFF].rxx"格式
HEADER
START RESOURCE [ef37946b].rss /* 此mmp文件所编译的可执行程序的UID3必须也为ef37946b,否则自启动不会成功。*/
TARGETPATH /private/101f875a/import // 生成的rsc文件名必须要是 "[FFFFFF].rxx"格式
HEADER
END
//请确保mmp中拥有 ReadUserData 能力,注意" /private/101f875a/import"不能够被更改。
1.3 在pkg文件中增加以下代码
"$(EPOCROOT)epoc32/data/z/private/101f875a/import[ef37946b].rsc" - "C:/private/101f875a/startup/[ef37946b].rsc"
和
"$(EPOCROOT)epoc32/data/z/private/101f875a/import[ef37946b].rsc" - "C:/private/101f875a/import/[ef37946b].rsc"
注意,这里的rsc文件必须拷贝到C盘下,否则自启动会失败。
如果是采用Carbide.c++编译,那么你可以使用上述代码,如果是使用makesis命令行打包或者使用.Net编译,那么你需要修改成绝对路径,路径名视你的安装目录而定。
例如:
"C:/Symbian/9.1/S60_3rd_MR/Epoc32/Data/z/private/101f875a/import[ef37946b].rsc" - "C:/private/101f875a/import/[ef37946a].rsc"
(2) MDL
适用范围:S60 2nd
不推荐
1) 危险系数高
在S60 2nd中,系统启动时会先启动核心,紧接着核心会扫描Recognizer文件(mdl)并启动它们,如果mdl文件有错,那么系统就无法启动,而用户也没有机会删除错误的mdl文件,需要联系客服返修甚至换主板。
2)
适用范围窄
在S60 3rd及以后版本中,Recognizer文件并不会在系统启动时被扫描和启动了,而是当用户打开某个文件时才会启动Recognizer文件。
并且在S60 3rd及以后版本中Recognizer构架也发生了变化,必须通过ECOM架构来实现Recognizer。所以mdl实现开机自启动只能在S60 2nd版本上有效。
在S60 3rd及以后版本中,Recognizer文件并不会在系统启动时被扫描和启动了,而是当用户打开某个文件时才会启动Recognizer文件。
并且在S60 3rd及以后版本中Recognizer构架也发生了变化,必须通过ECOM架构来实现Recognizer。所以mdl实现开机自启动只能在S60 2nd版本上有效。