• 启动另一个程序的方法(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.
  • 相关阅读:
    Computer Vision 基础学习
    PHP遍历文件夹下的文件时遇到中文目录乱码问题
    Note -「模板」矩阵
    Note -「模板」高斯消元
    Solution -「CF113D」Museum
    【更新中】后缀数组学习笔记
    【题解】ABC225F
    【更新中】2021ZR模拟赛要题记录
    【游记】CSP-S-2021
    【题解】#2019 [zr联赛集训day3]史上第四简洁的题面
  • 原文地址:https://www.cnblogs.com/yaoliang11/p/1839640.html
Copyright © 2020-2023  润新知