For our Windows 64 bit app, we install a folder under System32. One of the files is marked with the "Do not overwrite existing file" operation with condition set to 1.
We discovered that, at upgrade, the file is still overwritten. We tried to set the properties on the whole folder or use the "never overwrite" on component level, and all other combinations in between, with no success in not overwriting.
After many tests, we concluded that this behavior happens only for System32 folder and SysWow64 or Program Files are working just fine.
The version of AI seems to no matter; we tried most versions between 16.4 to 19.5.
Windows versions used were Win10 21H2 and Win Server 2019 1809 (all VMs).
For a minimum set of steps we created:
- a simple, wizard generated, 64 bit package (AMD64, EM64T) test project
- with one folder named "Test" under System 64 (default overwrite)
- with one txt file under that folder with "Do not overwrite" option with value 1
- execution level set to Run as administrator
- package type set to "EXE setup with resource next to it" with default options
- everything else remaining untouched with the default settings that come with creating a new project
We build two installers with incremented version (major, minor, revision, doesn't matter), choosing to generate a new Product Code.
We install one version, edit the txt file, upgrade with the next, and see that file has been overwritten.
An observation made during out tests, if it can be helpful, is that: during the uninstall phase of the upgrade, the Test folder is completely deleted and recreated on install; something that was not observed with other paths like SysWow64 or Program Files.
We also tried creating a folder named System32 and use that instead of the predefined System 64 one, sadly, with the same result.
We know that this could may very well be an issue with MSI and from Microsoft's side but we would kindly appreciate a confirmation of the issue and cause.