short version:
Are there undesired consequences of adding the necessary options to disable file virtualization (a UAC "feature") to an embedded application manifest?
( see http://www.codeguru.com/csharp/csharp/cs_misc/designtechniques/article.php/c15455/Tip-To-Disable-Virtualization.htm )
In Windows Vista, 7, and 8, an external manifest file can apparently be ignored for various seemingly arbitrary reasons.
long version:
The Aardwolf version of the GMCP mapper plugin (the one included in the Aardwolf MUSHclient package) includes a feature to perform regular integrity checks and backups of the sqlite database.
Occasionally the following scenario occurs (two accounts of this have been reported to me thus far)...
Someone on Windows 7 or 8 will experience file corruption and try to scrap their MUSHclient directory and start over. Erasing the MUSHclient directory, which they have invariably placed somewhere protected by UAC security, has the undesired result of leaving behind their old corrupted database files in the secret VirtualStore at %LOCALAPPDATA%\VirtualStore\Program Files\MUSHclient because Windows Vista+ by default virtualizes all file writes in secured areas to user-specific storage. And it, kind of stupidly at this point, does _not_ delete the virtual store when the MUSHclient folder is removed or overwritten.
So what happens, apparently, is that the next time MUSHclient loads, it accesses the old, corrupted files again, because those files exist in the virtual store.
So I got a report that this happened to a second user this morning, and I started to investigate options. As far as I can tell, my options are as follows:
1) Make sure that users never put the MUSHclient folder into a UAC protected space like Program Files
2) Construct an installer or other special program that deletes the virtual store.
3) Provide information on how to delete the virtual store in the event that the above scenario occuring again to another user
4) Block file virtualization entirely using the application manifest
Obviously (1) is impossible to enforce, and (2) limits directory portability.
I'm adding (3) to my website already, but I wanted to go further and just prevent the problem.
So I tried to create a manifest for MUSHclient.exe that would disable file virtualization. I followed a bunch of instruction pages and called it MUSHclient.exe.manifest and put it into the MUSHclient folder. But it wasn't working. Apparently external file manifests can be ignored for all kinds of reasons. So in order for this to work I think it would have to be embedded in the executable.
Thoughts?
Are there undesired consequences of adding the necessary options to disable file virtualization (a UAC "feature") to an embedded application manifest?
( see http://www.codeguru.com/csharp/csharp/cs_misc/designtechniques/article.php/c15455/Tip-To-Disable-Virtualization.htm )
In Windows Vista, 7, and 8, an external manifest file can apparently be ignored for various seemingly arbitrary reasons.
long version:
The Aardwolf version of the GMCP mapper plugin (the one included in the Aardwolf MUSHclient package) includes a feature to perform regular integrity checks and backups of the sqlite database.
Occasionally the following scenario occurs (two accounts of this have been reported to me thus far)...
Someone on Windows 7 or 8 will experience file corruption and try to scrap their MUSHclient directory and start over. Erasing the MUSHclient directory, which they have invariably placed somewhere protected by UAC security, has the undesired result of leaving behind their old corrupted database files in the secret VirtualStore at %LOCALAPPDATA%\VirtualStore\Program Files\MUSHclient because Windows Vista+ by default virtualizes all file writes in secured areas to user-specific storage. And it, kind of stupidly at this point, does _not_ delete the virtual store when the MUSHclient folder is removed or overwritten.
So what happens, apparently, is that the next time MUSHclient loads, it accesses the old, corrupted files again, because those files exist in the virtual store.
So I got a report that this happened to a second user this morning, and I started to investigate options. As far as I can tell, my options are as follows:
1) Make sure that users never put the MUSHclient folder into a UAC protected space like Program Files
2) Construct an installer or other special program that deletes the virtual store.
3) Provide information on how to delete the virtual store in the event that the above scenario occuring again to another user
4) Block file virtualization entirely using the application manifest
Obviously (1) is impossible to enforce, and (2) limits directory portability.
I'm adding (3) to my website already, but I wanted to go further and just prevent the problem.
So I tried to create a manifest for MUSHclient.exe that would disable file virtualization. I followed a bunch of instruction pages and called it MUSHclient.exe.manifest and put it into the MUSHclient folder. But it wasn't working. Apparently external file manifests can be ignored for all kinds of reasons. So in order for this to work I think it would have to be embedded in the executable.
Thoughts?