ANN: Vista "Gotchas" You Should Know About
Ken Ray
kray at sonsothunder.com
Thu Feb 22 17:46:54 CST 2007
Hey everyone - I've been working with the release of Vista (Home
Premium Edition) since its release and just discovered something you
may or may not be aware of that you REALLY need to be aware of IF:
- You install your program to the Program Files folder
- You leave the User Account Control turned on (as it shipped)
- You have one or more files you need to write data back to (like an
.ini or .cfg file, or even a Rev or MC stack that you change data in
and save) that is in the same folder as your program (or a subfolder)
Windows Vista, in attempting to be as secure as possible, and in an
attempt to support "legacy" applications that have .INI files in the
same location as the program, when it detects that you are attempting
to write back to a file in a protected area (like Program Files), will
instead write the changed data to a NEW location called the
"VirtualStore", and from that point on, will always READ AND WRITE to
the file in the VirtualStore.
So for example, suppose you installed your app as a stub Rev
standalone, with a main stack file that is read, can be changed, and
resaved. So your initial installation would put it here:
C:\Program Files\YourApp\YourApp.exe
C:\Program Files\YourApp\main.rev
Installation goes fine, and you launch 'YourApp.exe', which in turn
opens 'main.rev' - you enter some data into a field on the main stack
and click a button which saves 'main.rev' back to the hard drive. What
really happens is this:
1) Vista recognizes you're attempting to write the 'main.rev' file
back to a protected area (Program Files)
2) Vista creates a folder at in the VirtualStore and writes the
updated 'main.rev' stack to this path (assumes a user name of "Ken"):
C:\Users\Ken\AppData\Local\VirtualStore\Program
Files\YourApp\main.rev
This is called "virtualizing" the file. You then quit YourApp, and
relaunch it. YourApp launches, and then goes to open 'main.rev'. Here's
what REALLY happens:
1) Vista recognizes that you're attempting to open a file that it has
"virtualized" into the VirtualStore
2) Instead of opening the file from C:\Program Files\YourApp, it
instead opens the 'main.rev' that is in the VirtualStore.
3) If you make changes to the stack, it saves it back to the
VirtualStore.
This doesn't sound TOO bad, but here's where the 'gotchas' come in:
GOTCHA #1: If you leave Account Control on, but decide at some point
you want to start over from scratch or uninstall and reinstall (perhaps
an upgrade), if you replace your app in C:\Program Files\YourApp with a
new version (even one that has been upgraded or has significant
changes), the next time the app is launched it will open up the
'main.rev' from the VirtualStore and the user will not only NOT see a
brand new app, but it will appear as if any upgrades that had been made
are gone.
SOLUTION: To truly uninstall, you need to make sure you delete your
app from the VirtualStore as well.
GOTCHA #2: If you have opened a stack file from the VirtualStore as a
result of attempting to open it from a protected folder (like Program
Files), if you ask for 'the filename of this stack', it will NOT give
you the path to the VirtualStore version of the stack, but will instead
return the path to the original location in Program Files. So there is
not (AFAIK) any way for a stack that is open to know if it has been
virtualized or not.
SOLUTION: None that I know of.
GOTCHA #3: If the user turns off User Account Control, the next time
YourApp is launched, it will NOT get the file from the VirtualStore,
and will instead open the file from Program Files. It will appear like
all the data that had been entered is deleted (resulting in frightened
calls to Tech Support).
SOLUTION: In this instance, the "old" file still remains in the
VirtualStore, so it can be moved back into Program Files to restore the
data.
Note that if you turn off User Account Control at the get-go, you
experience none of these problems - but this is (a) not recommended by
Microsoft, and (b) something that must be manually done since Vista
ships with it turned on by default. And I'm sure IT departments won't
be happy if you request that they turn it off so your program can work
right... :-)
I'm sure there are more gotchas in Vista, but this was a major one that
I thought the community should know about.
Ken Ray
Sons of Thunder Software, Inc.
Email: kray at sonsothunder.com
Web Site: http://www.sonsothunder.com/
More information about the metacard
mailing list