Symbian 内嵌SIS自启动(inline sis autostart)

来源:互联网 发布:http post数据 编辑:程序博客网 时间:2024/05/02 20:06
总结一下内嵌SIS自启动的问题。
一般程序开机自启动,大家把自己的程序用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上已经测试通过