zoukankan      html  css  js  c++  java
  • 启动另一个程序的方法(symbian)

    启动另一个程序的方法(symbian)
    2009-11-06 14:16

    How to start and stop exe

    From Forum Nokia Wiki

    Reviewer Approved    

    Contents

    [hide]

    To start a exe

    Symbian 8 and earlier

    #include <eikdll.h>
    TInt err = EikDll::StartExeL(_L("c:\\system\\apps\\test.exe"));

    Symbian 9, for Server or Console application

    #include <apgcli.h> // link against apgrfx.lib
    #include <apacmdln.h> // link against apparc.lib
     
    TThreadId app_threadid;
    CApaCommandLine* cmdLine;
    cmdLine=CApaCommandLine::NewLC();
    cmdLine->SetExecutableNameL(_L("test.exe"));
    cmdLine->SetCommandL( EApaCommandRun );
    RApaLsSession ls;
    User::LeaveIfError(ls.Connect());
    TInt err=ls.StartApp(*cmdLine,app_threadid);
    ls.Close();
    CleanupStack::PopAndDestroy(); // cmdLine

    Symbian 9, for View-based application

    #include <apgcli.h> // link against apgrfx.lib
    const TUid KAppUid={0x12345678};
    _LIT(KDocName,"C:\\Data\\document.txt");
    TThreadId app_threadid;
    RApaLsSession ls;
    User::LeaveIfError(ls.Connect());
    TInt err=ls.StartDocument(KDocName, KAppUid, app_threadid);
    ls.Close();

    Symbian 9, RProcess

    _LIT(KMyExeFile,"test.exe");
    _LIT(KMyExeFileCmd,"first_argument second third");
     
    RProcess proc;
    User::LeaveIfError(proc.Create(KMyExeFile,KMyExeFileCmd));
    // start the process running! Don't forget this.
    proc.Resume();
    proc.Close(); // Closes the handle, not the process.

    To stop it

    First, you need to find the process

    On Symbian 9, process name is in the following format:

    <name>[<UID3>]<instance number>

    where: <name> - the name of executable or the name of Console - so remember it can be changed;

    <UID3> - UID3 of executable, in lowercase HEX, 8 digits, always the same;

    <instance number> - instance number, 4 digits, starting from 0001. For example name of kernel process is:

    ekern.exe[100041af]0001

    Killing

    Note: For S60 3rd Edition development, you are required the PowerMgmt capability to achieve this task.

    TFindProcess processFinder(_L("test.exe*")); // by name, case-sensitive
    //or
    //TFindProcess processFinder(_L("*[12345678]*")); // by UID3
    TFullName result;
    RProcess processHandle;
    while ( processFinder.Next(result) == KErrNone)
    {
    User::LeaveIfError(processHandle.Open ( processFinder, EOwnerThread));
    processHandle.Kill(KErrNone);
    processHandle.Close();
    }

    "Danger, Will Robinson!"
    Killing a process is bad practice as the internal state of the process and of the resources it might have open cannot be controlled. It is recommended that your implement a communication mechanism that would allow you to tell your daemon to release the reserved resources and then exit.

    From Forum Nokia Wiki

    Reviewer Approved    

    Contents

    [hide]

    To start a exe

    Symbian 8 and earlier

    #include <eikdll.h>
    TInt err = EikDll::StartExeL(_L("c:\\system\\apps\\test.exe"));

    Symbian 9, for Server or Console application

    #include <apgcli.h> // link against apgrfx.lib
    #include <apacmdln.h> // link against apparc.lib
     
    TThreadId app_threadid;
    CApaCommandLine* cmdLine;
    cmdLine=CApaCommandLine::NewLC();
    cmdLine->SetExecutableNameL(_L("test.exe"));
    cmdLine->SetCommandL( EApaCommandRun );
    RApaLsSession ls;
    User::LeaveIfError(ls.Connect());
    TInt err=ls.StartApp(*cmdLine,app_threadid);
    ls.Close();
    CleanupStack::PopAndDestroy(); // cmdLine

    Symbian 9, for View-based application

    #include <apgcli.h> // link against apgrfx.lib
    const TUid KAppUid={0x12345678};
    _LIT(KDocName,"C:\\Data\\document.txt");
    TThreadId app_threadid;
    RApaLsSession ls;
    User::LeaveIfError(ls.Connect());
    TInt err=ls.StartDocument(KDocName, KAppUid, app_threadid);
    ls.Close();

    Symbian 9, RProcess

    _LIT(KMyExeFile,"test.exe");
    _LIT(KMyExeFileCmd,"first_argument second third");
     
    RProcess proc;
    User::LeaveIfError(proc.Create(KMyExeFile,KMyExeFileCmd));
    // start the process running! Don't forget this.
    proc.Resume();
    proc.Close(); // Closes the handle, not the process.

    To stop it

    First, you need to find the process

    On Symbian 9, process name is in the following format:

    <name>[<UID3>]<instance number>

    where: <name> - the name of executable or the name of Console - so remember it can be changed;

    <UID3> - UID3 of executable, in lowercase HEX, 8 digits, always the same;

    <instance number> - instance number, 4 digits, starting from 0001. For example name of kernel process is:

    ekern.exe[100041af]0001

    Killing

    Note: For S60 3rd Edition development, you are required the PowerMgmt capability to achieve this task.

    TFindProcess processFinder(_L("test.exe*")); // by name, case-sensitive
    //or
    //TFindProcess processFinder(_L("*[12345678]*")); // by UID3
    TFullName result;
    RProcess processHandle;
    while ( processFinder.Next(result) == KErrNone)
    {
    User::LeaveIfError(processHandle.Open ( processFinder, EOwnerThread));
    processHandle.Kill(KErrNone);
    processHandle.Close();
    }

    "Danger, Will Robinson!"
    Killing a process is bad practice as the internal state of the process and of the resources it might have open cannot be controlled. It is recommended that your implement a communication mechanism that would allow you to tell your daemon to release the reserved resources and then exit.
  • 相关阅读:
    CTO这点事(技术,业务,管理,情商,周期,趋势)转
    Unit Test相关问题汇总
    优秀的命令行文件传输程序(转)
    ZOJ3329之经典概率DP
    Sql Server 2005 开发版亲測可用下载地址
    Hadoop与HBase中遇到的问题
    Struts2自己定义拦截器实例—登陆权限验证
    手游Apk破解疯狂,爱加密apk加固保护开发人员
    HighCharts 具体使用及API文档说明
    Linux(SLES)挂载NTFS移动硬盘实践
  • 原文地址:https://www.cnblogs.com/yaoliang11/p/1839640.html
Copyright © 2011-2022 走看看