Sarah Reichelt wrote:

I have some apps that when checking for updates, then offer a "Install
& Relaunch" option.
This seems really cool to me, but I haven't worked out how to do it in
my Rev apps.
If I am only updating separate sub-stacks, then I can work it out, but
if I want to update the actual application file what can I do?

I can get the existing app to download the new version, but then what?
Can a running app replace itself on disk?
Then how to tell it to quit & re-launch?

On a Mac, I guess I could spit out an AppleScript to quit the app,
re-locate the downloaded app, then restart it but the apps I have
don't seem to start an AppleScript when doing this.

Any suggestions?

I started down that road a while back, and then I realized that what made it seem cool and exotic is that almost no one else does it.

Most apps download, some also install, almost none can use the new build without quitting the old one first.

With Rev, using an anchor window pattern (sometimes called the "splash stack" for those who don't also update their splash screen) you can download compressed copies of your stack files, decompress them and overwrite the old ones, issue a revert command, and you have a new version.

Sounds good, but in my brief experiments down that road I quickly realized the wide range of things that can go wrong attempting to update components on-the-fly: to do it well you need to write a fair amount of code to restore globals (and hope you're using the same ones), save and restore window states and data states, etc. ad tedium. Too easy to get your fingers caught in the fan blades if you forget something.

Requiring a quit-and-relaunch lets you have a clean initialization, without replicating a more complex version of that initialization in vivo.

And you'll have no complaints about having to quit and relaunch from your end-users, since they've probably never seen an app that does it any other way.

Whether you attempt to update in vivo or go for the more common quit-and-relaunch, managing components can be made simpler by using a version file hosted somewhere with your app, with its URL stored in a custom property.

If you do this sort of thing often, you may consider using the Rev Interop specs for that - see the ECMI document Ken posted in the Files section at:
<http://tech.groups.yahoo.com/group/revInterop/>

I don't know if Trevor uses the RIP properties outlined there in his updater, but I see that he uses them elsewhere in things like the Data Grid, and with the RIPEdit tool also available in that group I've been adding them to all of my libraries as well for a variety of version control and managements tasks.

--
 Richard Gaskin
 Fourth World
 Rev training and consulting: http://www.fourthworld.com
 Webzine for Rev developers: http://www.revjournal.com
 revJournal blog: http://revjournal.com/blog.irv
_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to