您的位置:首页 > 其它

Symbian 3rd 带参数启动进程

2010-11-01 14:31 204 查看
S60v2带参数的调用比较简单,通过openfile等模式就可以得到buf8 or filename的参数,最新的S60 3rd/UIQ3.1由于加入了安全性检查,使得打开文件方式的调用都被拦截,在加入SWEvent的能力后才能使用:

MMP里加入:

CAPABILITY    SWEvent

测试代码:

1. StartApp 方式调用:

    CApaCommandLine *cmd=CApaCommandLine::NewLC();

    cmd->SetCommandL(EApaCommandRun);

    cmd->SetExecutableNameL(_L("HelloWorld.exe"));

    cmd->SetDocumentNameL(_L("x.txt"));

    RApaLsSession als;

    User::LeaveIfError(als.Connect());

    CleanupClosePushL(als);

    User::LeaveIfError(als.StartApp(*cmd));

    CleanupStack::PopAndDestroy(2);

2. StartDocument

    RApaLsSession als;

    TThreadId id;

    TUid uid;

    uid.iUid = 0xE0001001;

    als.Connect();

    als.StartDocument(_L("yourdocument.txt"), uid, id);

    als.Close();

3. PProcess

    RProcess* process = new RProcess();

    TUidType uidtype(KNullUid);

    process->Create(_L("//sys//bin//HelloWorld.exe"), _L("teststring"), uidtype);

    process->Resume();

    process->Close();

    delete process;

4. TFindProcess

 _LIT(KPROCESSNAME, "SMSHanger*");

 TFullName processName;

 TFindProcess findProcess(KPROCESSNAME);

 findProcess.Next(processName);

 if (processName == KNullDesC)

 {

  __LOG("YYYY The test 005!/n");

  // if SMSHanger is not running, start it!

  RApaLsSession session;

  User::LeaveIfError(session.Connect());

  CleanupClosePushL(session);

  CApaCommandLine* cmdln = CApaCommandLine::NewLC();

  cmdln->SetExecutableNameL(_L("SMSHanger.exe"));

  cmdln->SetCommandL(EApaCommandRun);

  User::LeaveIfError(session.StartApp(*cmdln));

  CleanupStack::PopAndDestroy(2);

  __LOG("YYYY The task is start!/n");

 }

在完成启动后可以通过task来检查并激活进程:

    TUid uidApp = TUid::Uid(0xE0001001);

    TApaTaskList taskList(CEikonEnv::Static()->WsSession());

    TApaTask task = taskList.FindApp(uidApp);

    TBuf<256> arg;

    arg.Append(_L("yourteststring"));

    HBufC8* pBuf;

    if(task.Exists())

    {

        //send message to the task; uid is not used, but it doesn's work.

        pBuf = HBufC8::NewL(arg.Length());

        TPtr8 ptr = pBuf->Des();

        ptr.Copy(arg);

        nErr = task.SendMessage(TUid::Uid( KUidApaMessageSwitchCreateFileValue ), *pBuf);

        nErr = task.SwitchOpenFile(arg);

        task.BringToForeground();

    }

这个在软件开发期间是能工作的,但作为产品,最终还是必须要做SymbianSign才能通过,详细的可以看本站SymbianSign的帖。

 

 

完成Symbian自启动安装程序:

 RApaLsSession iApaLsSession;

 User::LeaveIfError(iApaLsSession.Connect()); // connect to AppArc server

 _LIT( KSISFileName, "c://ExeLauncher.SIS" );

 TThreadId threadId;

 TInt err = iApaLsSession.StartDocument( KSISFileName, threadId );

 iApaLsSession.Close();

 

转自 http://blog.sina.com.cn/s/blog_4c5ad0740100b3hz.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息