Mike Lewis said:
A possible exception might be if your app allows the user to edit a report, but even that can be avoided.
Well, or it is wanted. The whole feature of protected report controls and allowing to modify reports also needs external report files, so they are even encouraged by the feature of the PROTECTED keyword of the MODIFY REPORT command.
And as a last not unimportant point, if excluded FRXes or SCXes or any code could override code included in an EXE, that would be a risk of EXE manipulation only needing to know names of files. And they are embedded in the EXE itself, so this would be a security hole of VFP executables, if it would work to patch an EXE by putting a changed FXP or SCX/SCT outside of an EXE that has that same name file embedded within itself.
What you could do, though it adds a completely different layer of complication, is bundle together all files in a zip and embed that into an EXE after the end of the actual VFP EXE, then use EXE internal code to unzip that part of your EXE, there are enough libraries available that would allow to unzip a string you get from extracting a known portion of your EXE you read by FILETOSTR, for example. There are even more elegant ways, as there are existing solutions, because that's effectivle what self extracting archives do and that's available, for example from 7zip in
look at the description, which tells that the LZMA SDK includes besides many other things SFX modules to create self-extracting packages and installers.
If you'd add such a mechanism a new build could be made by just changing the modified code file in a zip archive and adding that to the unmodified rump EXE. I don't think it's worth doing, though.
In fact, VFP does something similar when building an EXE, the FXPs etc are put into the EXE, even only unzipped. Someone else not in the forum anymore has announced to go for a build patching approach to only replace a changed FXP that is to be found in the old EXE. That has its limits as the new FXP could be larger than the old one and there are further problems I saw when trying out simple examples.
Your simplest official way to a faster build is unchecking the "Recompile all files" option in building. Then VFP only compiles PRGs etc, that are newer than their compilation by file date. The next step of the build, to compose an EXE from the object code files. In the case of SCX/VCX etc the object code is embedded within memo files of the file pairs, which is a bit harder to see how VFP even determines what needs to be compiled and what is already up to date, but assume you find out, I think VFP has good reasons to not patch an old EXE but recompose a new APP and then EXE file in the build process, as it would overcomplicate things to do otherwise. The time that's spared without recompiling ALL files is compilation time for all PRGs etc that are unchanged, and that's already a good time-saving option.
Chriss