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 |