Skip navigation
TomCruise06
Currently Being Moderated

How to delete ApplicationStorageDirectory while uninstalling the AIR application?

Sep 6, 2010 12:02 AM

Hi Guys,

 

     I have developed an AIR application. I store the data files in the applicationstoragedirectory, in which I edit the data through the coding.

 

     The issue is:

 

          1, When I uninstall the application, the applicationstoragedirectory does not get deleted.

 

          2, When I again reinstall the application, the old data is displayed, as the applicationstoragedirectory is not deleted.

 

     My Question is:

 

          How to delete the applicationstoragedirectory when the application is uninstalled?

 

     Thanks a lot in advance. Awaiting with my fingers crossed for a favorable and positive reply.

 

     17 guys  have viewed this post but none has answered for this.... Please help!!!

 

Regards,

Raj

 

Message was edited by: TomCruise06

 
Replies
  • Currently Being Moderated
    Sep 17, 2010 7:26 PM   in reply to TomCruise06

    AFAIK, your not going to be able to do this:

     

    http://webcache.googleusercontent.com/search?q=cache:hmx91vhltV0J:live docs.adobe.com/flex/3/langref/flash/filesystem/File.html+adobe+air+uni nstall+applicationstoragedirectory&cd=1&hl=en&ct=clnk&gl=us

     

     

    When you uninstall an AIR application, the uninstaller does not delete files that are stored    in the application storage directory.

     

    I know, I know.

     
    |
    Mark as:
  • Currently Being Moderated
    Nov 14, 2010 9:30 AM   in reply to Mark Robbins 312

    Does anybody have a good workaround to this? Is this a common issue with application developers or just an Adobe AIR specific 'feature'? I can't make my own installer since this will go in Adobe's Marketplace.

     

    I've been trying to figure out how to tell if the app has run for the first time so I can show a EULA and my research led me down this rabbit hole...still no end in sight.

     
    |
    Mark as:
  • Currently Being Moderated
    Nov 14, 2010 9:50 PM   in reply to TomCruise06

    Hi TomCruise06,

     

    I had a similar kind of problem and I had posted in the same forum, but I solved  the problem myself with a workaround explained below..

     

    http://forums.adobe.com/thread/230993?tstart=0

     

    http://forums.adobe.com/thread/224239

     

    Actually the Adobe AIR appliction doesn't delete the ApplicationStorage directory contents of the application while the application is uninstalled. So after uninstallating and reinstalling again since you again use the same installer which will have the same publisher id and the application id it will again try to write or overwrite the contents in the same Application directory which it has used previously.

     

    Instead if you have created a new installer by exporting the project then you will not have this problem as since this time your application will have different application id and it will try to use new folder in the Application directory instead of the old one but however this is not a workaround as you cannot send to your clients new installer each and every time they uninstall your application.

     

    So what you should do is you need to address this from within your code ..as you need to have a check for whether the application is uninstalled and is now being run for the first time so that you can point to ApplicationStorage directory and remove any contents if already exists.

     

    So for this you need to make use of Application created date...so when you write your contents to Application storage directory using shared objects you need to save the creationDate of the applicationDirectory mind you not the applicationStorageDirectory. Why because each timeyou uninstall your application your applicationDirectory get deleted which resides in the program file but applicationStorageDirectory will not be deleted.

     

    This code you need to write when you are saving your contents using the SharedObject in the ApplicationStorage Directory.


    var dir:File = File.applicationDirectory;
    locationPrefsObj.data.appCreatedDate = dir.creationDate.toString();
    locationPrefsObj.flush();

    And you should now have a check in the creationComplete event of the Application...

     

    private function init():void
      {
       checkAutoLogin();  
      } 
      // This function checks weather the application is installed and is launched for the first time then it will ask the user for login
      // i.e; to enter locationId and if it is not then it will login automatically and display the main screen
      private function checkAutoLogin():void
       {
        var locationPrefsObj:SharedObject = SharedObject.getLocal("PrefsObj");   
       

    if(locationPrefsObj.data.hasOwnProperty("appCreatedDate"))
        {
         var dir:File = File.applicationDirectory;
         var appCreatedDate:String = dir.creationDate.toString();
        
         if(locationPrefsObj.data.appCreatedDate == appCreatedDate)
         {
          //This means that the application is not reinstalled and so you need not delete the applicationStorageDirectory contents

          //Write your logic

         }
         else
         {

         //So here you will come to know that your application has been reinstalled and so you need to delete the applicationStorageDirectory contents.
          clearPrivateData();     
          trace("locationPrefsObj.data.appCreatedDate=" + locationPrefsObj.data.appCreatedDate);
          trace("curr_appCreatedDate=" + appCreatedDate);
         }
        }  

       }
       // This function clears or deletes the applicationStorageDirectory contents

      private function clearPrivateData():void
      {
       var appDataStorageDir:File = File.applicationStorageDirectory;
      
       if(appDataStorageDir.exists)
       {
        appDataStorageDir.deleteDirectory(true);
       }  
       }

     

     

    Hope this is clear and if you have any doubt please let me know.

     

    Thanks,

    Bhasker

     
    |
    Mark as:
  • Currently Being Moderated
    Sep 7, 2011 12:08 AM   in reply to TomCruise06

    Hello Bhasker...

     

    U Had given right solution for deleting Shared Object. When application uninstall it will not delete store Shared Object of application. Becuase of that after new installation of application contents of shared objects are fetched on the application which should not happen.

     

    Solution for that it is very good on creationComplete() compare the creation date of application installation with application directory creation date if it is same then no new installation of application if there is any mismatch between dates then it is assum that application is newly installed and in that simply cleared the data content shared Object.

     

    var sObject: SharedObject = SharedObject.getLocal(Model.getInstance().shared_objectName);
                if(sObject.data.appCreatedDate != appCreatedDate || sObject.data.appCreatedHours != appCreatedHours || sObject.data.appCreatedMinutes != appCreatedMinutes )
                {
                    for (var i in sObject.data) {
                        delete sObject.data[i];
                    }
                    sObject.flush();
                }

     

    Thanks Bhasker for heping me for getting propper solution...

     
    |
    Mark as:
  • Currently Being Moderated
    Sep 7, 2011 12:09 AM   in reply to BhaskerChari

    Thanks Bhasker

     

    I did googling for this issue but only got solution from u...

     
    |
    Mark as:
  • Currently Being Moderated
    Mar 27, 2013 8:08 AM   in reply to BhaskerChari

    Hi,

     

    But what if the user does not start the application after installing. The applicationStorageDirectory is only created when you start the app for the first time isn't it?

     

    Thanks,

    David

     
    |
    Mark as:
  • Currently Being Moderated
    Sep 20, 2013 7:50 AM   in reply to dalsantos

    You could simply delete everything on the apps 1st run (when it's first launched after installation) by using this:

     

    EncryptedLocalStore.reset() 

     
    |
    Mark as:

More Like This

  • Retrieving data ...

Bookmarked By (1)

Answers + Points = Status

  • 10 points awarded for Correct Answers
  • 5 points awarded for Helpful Answers
  • 10,000+ points
  • 1,001-10,000 points
  • 501-1,000 points
  • 5-500 points