Self-repairing install solution

Josh Mellicker josh at dvcreators.net
Thu Jan 10 19:13:13 EST 2008


For anyone who might need this in the future and hasn't written it,  
hopefully I can save you some time!

PROBLEM: What if your application depends on a bunch of auxilary  
files scattered around the user's hard drive- maybe these are  
pictures, movies, text files, settings, spreadsheets, who knows? You  
know you can make an installer that initially, will put all these  
files in all the right places. But what if the user accidentally  
deletes or moves some of them?


Instead of an installer, here is a function you can run when starting  
up that will install these files initially, then replace any missing  
asset files, "repairing" an installation if necessary on each launch.

------------------------------------------------------------------------ 
------------------------------------------------------------------------
STEP ONE:

Use this function (during development) to find all the important  
files and import them into custom properties:

ON importAssetsIntoCustomProps
     set the custompropertyset of me to "myAssetFiles"
     REPEAT
         answer file "choose file to import (cancel when done)"
         IF it is empty THEN exit to top
         set the myAssetFiles[it] of me to URL ("binfile:" & it)
     END repeat
END importAssetsIntoCustomProps

(You can do this repeatedly, as much as you want, it will update the  
binary data if you import the same filename that has been updated)
------------------------------------------------------------------------ 
------------------------------------------------------------------------
STEP TWO:

To call the function, use something like:

on openStack
     jjEnsureAssets
end openStack

------------------------------------------------------------------------ 
------------------------------------------------------------------------
-- include these handlers:

ON jjEnsureAssets
     set the custompropertyset of me to "myAssetFiles"
     put the customproperties of me into tAssets
     REPEAT FOR each line pFile in the keys of tAssets
         IF there is no file pFile THEN
             makeFoldersIfNecessary pathFromPathAndFile(pFile)
             put the myAssetFiles[pFile] of me into URL ("binfile:" &  
pFile)
         END IF
     END repeat
END jjEnsureAssets

ON makeFoldersIfNecessary pLocalFilePath
     set the itemdel to "/"
     put "/" into tPath
     REPEAT WITH x = 2 to the number of items of pLocalFilePath --  
("2" because "/" will surely exist! :-)
         put item x of pLocalFilePath & "/" after tPath
         IF there is not a folder tPath THEN
             create folder tPath
         END IF
     END REPEAT
END makeFoldersIfNecessary

FUNCTION pathFromPathAndFile tPathAndFile
     set the itemdel to "/"
     delete the last item of tPathAndFile
     return tPathAndFile
END pathFromPathAndFile

------------------------------------------------------------------------ 
------------------------------------------------------------------------




More information about the use-livecode mailing list