This is one of those tricks that many of the experienced ConfigMgr/SCCM admins out there already know about but I wanted to spread the knowledge for all those not yet familiar with the trick.
The scenario often comes up where there is a need (slow links, network congestion concerns, etc.) to get your application files out to client machines and into their cache prior to installation, to provide a better installation experience. For mandatory deployments this happens automatically. You make the application available now but have a mandatory deadline at some appropriate time in the future, say 2 days from now on Monday. The ConfigMgr client will see this configuration and start pulling the files into the client's cache so they will be local and ready for fast execution on Monday (after a quick CRC check to make sure files haven’t changed since download. However, if you are doing an optional machine based deployment then ConfigMgr has no idea if the install will EVER kick, so no pre-download is done.
I have encountered customer scenarios where the desire is still to have the files pre-deployed to the client machines because they know that many folks will start doing optional installs once allowed. In this case you can take advantage of the above functionality, even though the actual install will be optional.
In the package/program model you create your package with all the necessary files and you create your program to run the desired command line as normal but you also make another program. This other program does something simple and silent, like an ipconfig or such. This you make mandatory and deploy out immediately. Because the package files are associated with the program they will start downloading and cone down the simple program will run, basically doing nothing. With the files now in the ConfigMgr cache they will be ready for when the 2nd program runs, at which time they will be checked and used.
In the application model things are a little more difficult because deployment types don’t share binaries like they do in the package model. In this scenario you have to do a little more work such that a package (or application) copies files down to some temp location then your optional deployment has to be changed to execute from the temp location instead of the normal ConfigMgr cache. Not so clean and nice. L