installationservices/swi/source/swis/server/processor.cpp
branchRCL_3
changeset 25 7333d7932ef7
parent 12 7ca52d38f8c3
child 26 8b7f4e561641
equal deleted inserted replaced
24:5cc91383ab1e 25:7333d7932ef7
   257 		break;
   257 		break;
   258 	
   258 	
   259 	case EInstallFiles:
   259 	case EInstallFiles:
   260 		if (DoStateInstallFilesL())
   260 		if (DoStateInstallFilesL())
   261 			{
   261 			{
       
   262 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK			
       
   263 			SwitchState(EParseApplicationRegistrationFiles);
       
   264 #else
   262 			SwitchState(EUpdateRegistry);
   265 			SwitchState(EUpdateRegistry);
   263 			}
   266 #endif			
   264 		break;
   267 			}
   265 
   268 		break;
       
   269 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
       
   270 	case EParseApplicationRegistrationFiles:
       
   271 	    if (DoParseApplicationRegistrationFilesL())
       
   272 	        {
       
   273 	        SwitchState(EUpdateRegistry);
       
   274 	        }
       
   275 	    break;
       
   276 #endif		
       
   277 	    
   266 	case EUpdateRegistry:
   278 	case EUpdateRegistry:
   267 		if (DoStateUpdateRegistryL())
   279 		if (DoStateUpdateRegistryL())
   268 			{
   280 			{
   269 			SwitchState(EFinished);
   281 			SwitchState(EFinished);
   270 			}
   282 			}
   775 		
   787 		
   776 		// Skip targets less than 4 characters, since this won't be a valid path
   788 		// Skip targets less than 4 characters, since this won't be a valid path
   777 		// for transaction service RemoveL().
   789 		// for transaction service RemoveL().
   778 		if (fileToRemove.Length() > 3)
   790 		if (fileToRemove.Length() > 3)
   779 			{
   791 			{
   780 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
   792 			err = RemoveWithRetryAttemptL(fileToRemove);
   781 			TRAP(err, TransactionSession().RemoveL(fileToRemove));
       
   782 #else
       
   783 			TRAP(err, IntegrityServices().RemoveL(fileToRemove));
       
   784 #endif
       
   785 			// Display error dialog and leave if the file cannot be removed,
       
   786 			// ignoring missing files, media cards not present or corrupt media
       
   787 
       
   788 			TInt noOfDetletionAttempts=1;
       
   789 			while ((err == KErrInUse ||err==KErrAccessDenied )&& noOfDetletionAttempts <= KMaxNoOfDeletionAttempts )
       
   790 			    {
       
   791 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
       
   792 			    TRAP(err, TransactionSession().RemoveL(fileToRemove));
       
   793 #else
       
   794 			    TRAP(err, IntegrityServices().RemoveL(fileToRemove));
       
   795 #endif
       
   796                 DEBUG_PRINTF2(_L8("Deletion attempt %d"), noOfDetletionAttempts);
       
   797                 noOfDetletionAttempts++;
       
   798                 User::After(KRetryInterval);
       
   799 			    }
       
   800 
   793 
   801 			if(err !=KErrNone && err != KErrNotFound && err != KErrPathNotFound	&& err != KErrNotReady && err != KErrCorrupt)
   794 			if(err !=KErrNone && err != KErrNotFound && err != KErrPathNotFound	&& err != KErrNotReady && err != KErrCorrupt)
   802 				{
   795 				{
   803         		CDisplayError* displayCannotDelete=CDisplayError::NewLC(iPlan.AppInfoL(), EUiCannotDelete, fileToRemove);
   796 				CDisplayError* displayCannotDelete=CDisplayError::NewLC(iPlan.AppInfoL(), EUiCannotDelete, fileToRemove);
   804 				iUiHandler.ExecuteL(*displayCannotDelete);
   797 				iUiHandler.ExecuteL(*displayCannotDelete);
   805 				CleanupStack::PopAndDestroy(displayCannotDelete);
   798 				CleanupStack::PopAndDestroy(displayCannotDelete);
   806 				User::Leave(err);
   799 				User::Leave(err);
   807 				}
   800 				}
   808 			//Create an SWI event					
   801 			//Create an SWI event					
   840 				if (!(info.iMediaAtt & KMediaAttWriteProtected) && info.iType!=EMediaNotPresent)
   833 				if (!(info.iMediaAtt & KMediaAttWriteProtected) && info.iType!=EMediaNotPresent)
   841 					{
   834 					{
   842 					TChar driveLetter;
   835 					TChar driveLetter;
   843 					User::LeaveIfError(iFs.DriveToChar(drive, driveLetter));
   836 					User::LeaveIfError(iFs.DriveToChar(drive, driveLetter));
   844 					privatePath[0] =  static_cast<TText> (driveLetter);
   837 					privatePath[0] =  static_cast<TText> (driveLetter);
   845 					// try to remove the private directory, ignore if it can't be found
   838 
   846 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
   839 					err = RemoveWithRetryAttemptL(privatePath);
   847 					TRAP(err, TransactionSession().RemoveL(privatePath));
       
   848 #else
       
   849 					TRAP(err, IntegrityServices().RemoveL(privatePath));
       
   850 #endif
       
   851 
       
   852 		            TInt noOfDetletionAttempts=1;
       
   853 		            while ((err == KErrInUse ||err==KErrAccessDenied )&& noOfDetletionAttempts <= KMaxNoOfDeletionAttempts )
       
   854 		                {
       
   855 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
       
   856 		                TRAP(err, TransactionSession().RemoveL(privatePath));
       
   857 #else
       
   858 		                TRAP(err, IntegrityServices().RemoveL(privatePath));
       
   859 #endif
       
   860 		                DEBUG_PRINTF2(_L8("Deletion attempt %d"), noOfDetletionAttempts);
       
   861 		                noOfDetletionAttempts++;
       
   862 		                User::After(KRetryInterval);
       
   863 		                }
       
   864 
   840 
   865 					if (err != KErrNone && err != KErrNotReady &&
   841 					if (err != KErrNone && err != KErrNotReady &&
   866 						err != KErrNotFound && err != KErrPathNotFound && err != KErrCorrupt)
   842 						err != KErrNotFound && err != KErrPathNotFound && err != KErrCorrupt)
   867 						{
   843 						{
   868 						User::Leave(err);
   844 						User::Leave(err);
   908 		// not block uninstallation.Retaining the RunRemove behaviour. 
   884 		// not block uninstallation.Retaining the RunRemove behaviour. 
   909 		TRAP_IGNORE(RunFileL(fileName->Target(), fileName->MimeType(), fileName->OperationOptions()));
   885 		TRAP_IGNORE(RunFileL(fileName->Target(), fileName->MimeType(), fileName->OperationOptions()));
   910 		}	
   886 		}	
   911 	}
   887 	}
   912 
   888 
       
   889 TInt CProcessor::RemoveWithRetryAttemptL(TDesC& aFileToRemove)
       
   890 	{
       
   891 	TInt err = KErrNone;
       
   892 	TInt noOfDetletionAttempts=1;
       
   893 			
       
   894 	do {
       
   895 #ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
       
   896 	    TRAP(err, TransactionSession().RemoveL(aFileToRemove));
       
   897 #else
       
   898 	    TRAP(err, IntegrityServices().RemoveL(aFileToRemove));
       
   899 #endif
       
   900         DEBUG_PRINTF2(_L8("Deletion attempt %d"), noOfDetletionAttempts);
       
   901         noOfDetletionAttempts++;
       
   902         User::After(KRetryInterval);
       
   903 		} while ((err == KErrInUse ||err==KErrAccessDenied )&& noOfDetletionAttempts <= KMaxNoOfDeletionAttempts );
       
   904 	return err;
       
   905 	}
       
   906