One of the things I work with on my team is how customers deploy their applications when they depend on a redistributable such as the .NET Framework or J#.  I am just starting to get my arms around this space, and have more questions than answers right now.  Having worked on the Visual Studio setup quite a bit, I know it can be tricky to build your setup when you need to “chain” in a completely separate setup.  For example, how do you detect when the dependency is already installed, how do you show progress in a meaningful way to the user with a process that's black box to you, what happens if the outside setup fails, and the list goes on.

For folks out there who have done deployment of the .NET Framework or J# with their application before, how did it go for you?  Did you end up using a tool like Visual Studio's deployment project or InstallShield?  What problems did you run into?