(NOTE: Added 'important edit' below to basically re-ask this question in a different way)
I know there are many different packages out there to put inside a delphi application for software intallation. I don't need anything fancy, I just need the ability to do some of the basic installation routines, such as proper installation/replacement of DLL's. I can do the majority of the installation manually, like copying files, saving registry settings, etc. I just need whatever it takes to make my installer properly register the new software with Windows (or updated software).
It would also be helpful if it can, for example, check if a file is currently being used before trying to replace it. Nothing visual is needed, there must be some sort of simple non-visual component which can handle these common routines. And it should also be free open-source, if possible. I don't want to have to distribute a load of DLL's or other third-party files with my installer.
Any good suggestions? Please don't answer with any huge complex fancy installer system. It just needs to be something simple to use directly in Delphi. It doesn't even have to be a component, even just a unit or library of units with some functions or such to help automate these common bits and pieces of installation.
ADDED NOTE: I already have an installer program made in delphi-7, but would like something I can throw in my project which includes any type of assistance with the most common parts of installing software.
IMPORTANT EDIT:
My approach in asking this question I believe is wrong. Please allow me to re-elaborate on this...
Our company already has a simple updater utility. Actually, this is not an 'Installer', but an 'Updater' program. it simply replaces a few EXE files, executes SQL statements (MSSQL server), writes some registry entries, etc...
These are the issues I face with how this program is currently working:
I can understand how it's difficult to understand what I'm asking for. I don't need a solution that can be used for anything and everything thrown at it. This is for this one software, nothing else. I know there probably isn't one single solution to cover all of the above, but any help would be great.
The JCL library includes a lot of the low level Windows functionality that you require. Most anything that can be done through the Windows API is available in JCL.
Refer to the previous question about what you need to do to prevent the "This program might not have installed correctly" message.
I scripted a similar database updater in the past that included many Go statements, for a MS SQL database. I used a VB script. That might not be a huge improvement over what you have now, but it did include flow control and trap errors. You can link to Windows Script Host in Delphi, but my main point is to figure out what interfaces are exposed by your DBMS and use them.
Here's a tip regarding DLLs. Don't put them in the Windows system folder. Put them in the same folder as the executable. This prevents other people from sharing your DLLs. That way, when your program is shut down, the DLLs are not loaded and you can replace them. If you're using shared system DLLs, then there's no workaround to rebooting.
If this updater is for the public, don't forget to sign it and put in the application manifest, so the users have a good experience.
I recommend tackling one issue at a time, and unless your application welcomes test units, write a small program to test each solution.
Other than that, I say go in elbows deep and start writing code.