visual-studiovb6windows-installerinstallationvsinstaller

what is the diff between dependencies and manually add a dll/ocx in vs installer 6?


i'm using vs installer to build a setup package for my vb6 app. and the problem is i can see that under the project explorer there's a list of dependencies attached to my exe file.

alt text http://img505.imageshack.us/img505/9696/croppercapture259lr8.png

and under the file system on target machine treeview, i can actually store the dll/ocx on a folder or in the windows system folder itself[the left window].

alt text http://img101.imageshack.us/img101/9224/croppercapture251qm1.png

so what i don't understand is .. is there actually a difference? if i just set the dependencies and didn't add the dll or ocx to the folder or win sys folder, does the dll automatically get copied over too?


Solution

  • It is not guaranteed that all those dlls will be present on the system that the software is being installed on. So they need to be included in your installer. From there you have two choices.

    You can install them in your windows system folders or in your application folder. The difference is that if you install them in your application folder you can set things up on XP and Vista so that the different version of the software with different version of the components can be fired up and run side by side. Installing them into the system folder will break any older version that depend on older version of the components.

    Installing in the application folder rarely doesn't work if a component depends on other components that can't be updated. When this occurs it is usually with with Microsoft libraries. They have gotten better over the years on this issue.

    You can read more about the issues involving side by side execution here

    Finally the dependencies need to be in your installer so that they are registered in the Windows Registry. Unlike most .NET assemblies any ActiveX/COM application needs to have the component registered in order to use it even if you are using CreateObject and Variant types to access it.

    I will admit the whole process is idiosyncratic and is one of the sources for the stories about DLL Hell. Start with the MSDN article, use wikipedia, and of course ask further questions here.