I think what is missing from the suggestions so far is that they all involve manually modifying the shortcut definition on each of the 700 workstations.
I am sure that some api exists for desktop shortcuts which could simplify or automate this process. The difficulty would then be to get 700 users to run the utility which would update their desktop's shortcuts. Having supported large remote user-bases, I can testify that this is no small task.
What I have done with one of my applications is to add a launch-wafer to the program. It works like this...
App1.EXE (which has 700 remote desktop icons pointing at it) is a small fixed program whose functions will never change or be enhanced. Its only function is to read an ini or database to get the name of the current version of the program, and then to launch that program.
When I want to update the program, I just copy the new version to my shared server with a unique name and change the ini/database entry. All of my users continue to run the old version for the rest of the day, but when they log on the next morning, App1.exe runs the new version.
I actually took this idea a little farther as my needs evolved. I added one record for each registered user of the program, allowing me to designate different versions for different users. (This is great for pre-release beta testing) I also update each registered user's record each time they run the program so that I know if they are actually using the new program or that they have just left the old program running overnight.
I also added a timer to my main application. Once per minute, it checks to see if a file called newversn.key exists in the program's directory. If it does, it pops up a messagebox, telling the user that there is a new version available which will be activated the next time the double click on their desktop icon. My wafer program deletes this key file each time it runs.
This approach has worked very nicely for me on a terminal services based wan with about 200 users. I'm sure it would scale up to your needs if handled carefully.
Some comments on implementing a wafer...
1). Use the $M directives to minimize its memory usage. Once you have all of your wafer functionality coded, play with the $M values to be bearest minimum. Remember that both the wafer and actual application have to fit in memory at the same time.
2). Once the launch works, the wafer should terminate so that the extra startbar box doesn't confuse your users.
3). Name your actual application the same as your wafer but with a version number at the end of the name. That way, semi-tech users won't be confused by the discrepency between the program name in icon's properties and the actual task which is launched.
4). If you choose to put the splash screen in the wafer, don't include a version number on it since the wafer will not be changing over time.
Hope this helps!
Peace,
Colt.