diff -r d1838696558c -r 9dcba1ee99f7 appinstaller/AppinstUi/Client/Src/SWInstSilentLauncher.cpp --- a/appinstaller/AppinstUi/Client/Src/SWInstSilentLauncher.cpp Thu Oct 14 14:11:30 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,174 +0,0 @@ -/* -* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: This file contains the implementation of RSWInstSilentLauncher -* class member functions. -* -*/ - - -// INCLUDE FILES -#include -#include -#include -#include - -#include "SWInstApi.h" -#include "SWInstDefs.h" -#include "SWInstCommon.h" - -using namespace SwiUI; - -const TUint KMaxServerPoll = 100; - -#ifdef __WINS__ -const TUint KServertPollTimeout = 1000000; //1sec. Wins needs more time. -#else -const TUint KServertPollTimeout = 100000; -#endif - -// ================= MEMBER FUNCTIONS ======================= - -// ----------------------------------------------------------------------------- -// RSWInstSilentLauncher::RSWInstSilentLauncher -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -EXPORT_C RSWInstSilentLauncher::RSWInstSilentLauncher() - { - } - -// ----------------------------------------------------------------------------- -// RSWInstSilentLauncher::Connect -// Creates connection to the server. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt RSWInstSilentLauncher::Connect() - { - TInt result( KErrNone ); - - TUint differentiator = 0; - TRAP( result, differentiator = StartServerL( KUidSWInstSvr ) ); - if ( result == KErrNone ) - { - TName serverName; - ConstructServerName( serverName, KUidSWInstSvr, differentiator ); - TRAP( result, ConnectExistingByNameL( serverName ) ); - if ( result == KErrNone ) - { - iConnected = ETrue; - } - } - // Return the result code - return result; - } - -// ----------------------------------------------------------------------------- -// RSWInstSilentLauncher::ServiceUid -// Returns the UID of the service that this session provides an interface for. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TUid RSWInstSilentLauncher::ServiceUid() const - { - return TUid::Uid( KSWInstSilentInstallServiceUid ); - } - -// ----------------------------------------------------------------------------- -// RSWInstSilentLauncher::ServerName -// Constructs the name of the server application. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void RSWInstSilentLauncher::ConstructServerName( TName& aServerName, - TUid aAppServerUid, - TUint aServerDifferentiator ) - { - _LIT(KServerNameFormat, "%08x_%08x_AppServer"); - aServerName.Format( KServerNameFormat, aServerDifferentiator, aAppServerUid ); - } - -// ----------------------------------------------------------------------------- -// RSWInstSilentLauncher::StartServerL -// Starts the server application. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TUint RSWInstSilentLauncher::StartServerL( TUid aAppUid ) - { - // Start the server application - TName serverName; - TUint differentiator( 0 ); - while ( ETrue ) - { - differentiator = Math::Random(); - if ( differentiator==0 ) - continue; - ConstructServerName( serverName, aAppUid, differentiator ); - TFindServer find( serverName ); - TFullName fullName; - if ( find.Next( fullName ) == KErrNone ) - continue; - break; - } - - TThreadId serverThreadId; - LaunchAppL( aAppUid, differentiator, serverThreadId ); - - // Poll for the server to be started - for ( TInt ii = 0; ii < KMaxServerPoll; ii++ ) - { - // look for the server name - TFindServer find( serverName ); - TFullName fullName; - if ( find.Next( fullName ) == KErrNone ) - { - return differentiator; // found the server, so return - } - User::After( KServertPollTimeout ); // wait before trying again - } - User::Leave( KErrNotFound ); // failed to find the server, bomb out - - return differentiator; - } - -// ----------------------------------------------------------------------------- -// RSWInstSilentLauncher::LaunchAppL -// Launches the server application. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void RSWInstSilentLauncher::LaunchAppL( TUid aAppUid, TUint aServerDifferentiator, TThreadId& aThreadId ) - { - RApaLsSession apa; - User::LeaveIfError( apa.Connect() ); - CleanupClosePushL( apa ); - - TApaAppInfo info; - User::LeaveIfError( apa.GetAppInfo( info, aAppUid ) ); - - CApaCommandLine* cmdLine = CApaCommandLine::NewLC(); - cmdLine->SetExecutableNameL( info.iFullName ); - cmdLine->SetServerRequiredL( aServerDifferentiator ); - // Set the command to start the server in background - cmdLine->SetCommandL( EApaCommandBackground ); - - User::LeaveIfError( apa.StartApp( *cmdLine, aThreadId ) ); - - CleanupStack::PopAndDestroy( 2, &apa ); // cmdLine and apa - } - - -// End of File