Symbian 内嵌SIS自启动(inline sis autostart)(转)
总结一下内嵌SIS自启动的问题。
一般程序开机自启动,大家把自己的程序用rss的方法做成自启动。但是内嵌到另外一个SIS包中
发现安装完成后,重启手机内嵌SIS不能自启动。可悲的事我居然惊奇的发现魔秀的动态主题用
RSS打包是可以完成自启动的。为什么我的就不行呢?难道是人品问题。
先来看看如何打内嵌SIS吧。
以下就是内嵌SIS的在PKG中的语法
If
一般程序开机自启动,大家把自己的程序用rss的方法做成自启动。但是内嵌到另外一个SIS包中
发现安装完成后,重启手机内嵌SIS不能自启动。可悲的事我居然惊奇的发现魔秀的动态主题用
RSS打包是可以完成自启动的。为什么我的就不行呢?难道是人品问题。
先来看看如何打内嵌SIS吧。
以下就是内嵌SIS的在PKG中的语法
If
NOT PACKAGE(0xUID)//先判断自己的SIS包安装没有
@"E:\Symbian3rd_MR\yourApp\sis\yourApp.sis", (0xUID)
EndIf
哎时间不等人,只能另寻它法来解决此问题了。
创建自己的PLUGIN DLL,用DLL把自己的EXE调起来。
下面看如何实现。
TInt CStart****Recog::StartAppThreadFunction(TAny* )
{
User::After(5000000);//等待五S,等系统启动完成
// create a TRAP cleanup
CTrapCleanup * cleanup = CTrapCleanup::New();
TInt err;
if( cleanup == NULL )
{
err = KErrNoMemory;
}
else
{
TRAP( err, StartAppThreadFunctionL() );
}
delete cleanup;
if (err!=KErrNone)
User::Panic(_L("autostart"), err);
return err;
}
bool CStart****Recog::IsProcessRunning()
{
bool Ret = false;
TBuf8<128> aaaa;
TFileName res;
TFindProcess find(_L("*"));
while(find.Next(res) == KErrNone)
{
RProcess ph;
ph.Open(res);
if(ph.SecureId() == 0x2002397F)// SID of the process we are looking for
{
Ret = true;
ph.Close();
break;
}
ph.Close();
}
return Ret;
}
void CStart****Recog::StartAppThreadFunctionL()
{
if (IsProcessRunning()) {
return;
}
//在这里可以调起自己的EXE
TFileName fnAppPath = _L("\\sys\\bin\\yourself.exe");
RProcess server;
CleanupClosePushL(server);
User::LeaveIfError(server.Create(fnAppPath, _L("")));
server.Resume();
server.Close();
CleanupStack::PopAndDestroy();
}
以上代码在N73上已经测试通过
@"E:\Symbian3rd_MR\yourApp\sis\yourApp.sis", (0xUID)
EndIf
哎时间不等人,只能另寻它法来解决此问题了。
创建自己的PLUGIN DLL,用DLL把自己的EXE调起来。
下面看如何实现。
TInt CStart****Recog::StartAppThreadFunction(TAny* )
{
User::After(5000000);//等待五S,等系统启动完成
// create a TRAP cleanup
CTrapCleanup * cleanup = CTrapCleanup::New();
TInt err;
if( cleanup == NULL )
{
err = KErrNoMemory;
}
else
{
TRAP( err, StartAppThreadFunctionL() );
}
delete cleanup;
if (err!=KErrNone)
User::Panic(_L("autostart"), err);
return err;
}
bool CStart****Recog::IsProcessRunning()
{
bool Ret = false;
TBuf8<128> aaaa;
TFileName res;
TFindProcess find(_L("*"));
while(find.Next(res) == KErrNone)
{
RProcess ph;
ph.Open(res);
if(ph.SecureId() == 0x2002397F)// SID of the process we are looking for
{
Ret = true;
ph.Close();
break;
}
ph.Close();
}
return Ret;
}
void CStart****Recog::StartAppThreadFunctionL()
{
if (IsProcessRunning()) {
return;
}
//在这里可以调起自己的EXE
TFileName fnAppPath = _L("\\sys\\bin\\yourself.exe");
RProcess server;
CleanupClosePushL(server);
User::LeaveIfError(server.Create(fnAppPath, _L("")));
server.Resume();
server.Close();
CleanupStack::PopAndDestroy();
}
以上代码在N73上已经测试通过