Innosetup and side-by-side assemblies
-
I recently discovered that Visual Studio 2008 puts its runtime libraries in the side-by-side assemblies directory. A lot of my projects have dependencies on the runtime DLLs. According to what I've read about side-by-side, it "requires" the use of Windows Installer to deploy them. However, I've invested significant time in learning and using Inno Setup and don't really like the Windows Installer for various reasons (some personal, some professional). I guess my question is: How does redistribution of side-by-side assemblies work (behind the scenes)? I should point out that my projects are being imported from older versions of VS and I'm wanting to fully update them to the latest version of VS. Side-by-side is new to me.
-
I recently discovered that Visual Studio 2008 puts its runtime libraries in the side-by-side assemblies directory. A lot of my projects have dependencies on the runtime DLLs. According to what I've read about side-by-side, it "requires" the use of Windows Installer to deploy them. However, I've invested significant time in learning and using Inno Setup and don't really like the Windows Installer for various reasons (some personal, some professional). I guess my question is: How does redistribution of side-by-side assemblies work (behind the scenes)? I should point out that my projects are being imported from older versions of VS and I'm wanting to fully update them to the latest version of VS. Side-by-side is new to me.
I don't use innosetup, so not sure how you implement this, but it's possible to include the side-by-side assemblies in your distribution. If you have your application in a directory c:\myapps and your exectuable "myapp.exe" is in this folder, you can put the side-by-side assemblies in that folder also. You'll find the correct distributables for the side-by-side assemblies in the \Program Files\Microsoft Visual Studio 8\VC\redist folder - there are several subfolders there (e.g. x86, ia64, amd64 and so on). Inside the x86 folder, you'll find a folder named Microsoft.VC80.MFC and another folder called Microsoft.VC80.CRT. Copy those complete folders to your c:\myapps directory. When done, your c:\myapps directory would contain
myapp.exe - executable you wrote Microsoft.VC80.CRT - folder with the side-by-side C Runtime for VC80 Microsoft.VC80.MFC - folder with the side-by-side MFC 80
That should allow your app to run. Hope that helps.
Karl - WK5M PP-ASEL-IA (N43CS) PGP Key: 0xDB02E193 PGP Key Fingerprint: 8F06 5A2E 2735 892B 821C 871A 0411 94EA DB02 E193
-
I don't use innosetup, so not sure how you implement this, but it's possible to include the side-by-side assemblies in your distribution. If you have your application in a directory c:\myapps and your exectuable "myapp.exe" is in this folder, you can put the side-by-side assemblies in that folder also. You'll find the correct distributables for the side-by-side assemblies in the \Program Files\Microsoft Visual Studio 8\VC\redist folder - there are several subfolders there (e.g. x86, ia64, amd64 and so on). Inside the x86 folder, you'll find a folder named Microsoft.VC80.MFC and another folder called Microsoft.VC80.CRT. Copy those complete folders to your c:\myapps directory. When done, your c:\myapps directory would contain
myapp.exe - executable you wrote Microsoft.VC80.CRT - folder with the side-by-side C Runtime for VC80 Microsoft.VC80.MFC - folder with the side-by-side MFC 80
That should allow your app to run. Hope that helps.
Karl - WK5M PP-ASEL-IA (N43CS) PGP Key: 0xDB02E193 PGP Key Fingerprint: 8F06 5A2E 2735 892B 821C 871A 0411 94EA DB02 E193
VC8 is Visual Studio 2005 (not what I have). VC9 is Visual Studio 2008 (what I have). And MFC has some weird stuff involving language separated DLLs (MFC directory AND a MFCLOC directory). What do I do for those? How do I get my old VC++ 2003 projects to start using side-by-side? Right now the compiler is looking for the 7.1 version of the runtimes (msvcr71.lib), not finding it, and therefore the linker is failing. Remember, these are imported solutions and projects from VC++ 2003.
-
I recently discovered that Visual Studio 2008 puts its runtime libraries in the side-by-side assemblies directory. A lot of my projects have dependencies on the runtime DLLs. According to what I've read about side-by-side, it "requires" the use of Windows Installer to deploy them. However, I've invested significant time in learning and using Inno Setup and don't really like the Windows Installer for various reasons (some personal, some professional). I guess my question is: How does redistribution of side-by-side assemblies work (behind the scenes)? I should point out that my projects are being imported from older versions of VS and I'm wanting to fully update them to the latest version of VS. Side-by-side is new to me.
With VS2005 it is possible to include the file vcredist_x86.exe within your installer. Have Inno run and then delete that file at setup and the all the necessary files will installed on the users machine in the proper location. VS2008 should have the same method.
-
VC8 is Visual Studio 2005 (not what I have). VC9 is Visual Studio 2008 (what I have). And MFC has some weird stuff involving language separated DLLs (MFC directory AND a MFCLOC directory). What do I do for those? How do I get my old VC++ 2003 projects to start using side-by-side? Right now the compiler is looking for the 7.1 version of the runtimes (msvcr71.lib), not finding it, and therefore the linker is failing. Remember, these are imported solutions and projects from VC++ 2003.
VS2005 also has the MFCLOC and such. I believe the same basic instructions I gave you will work with VS2008 to use the side-by-side assemblies. If the compiler is looking for the 7.1 version, that's a completely different problem from the installation of the assemblies.
Karl - WK5M PP-ASEL-IA (N43CS) PGP Key: 0xDB02E193 PGP Key Fingerprint: 8F06 5A2E 2735 892B 821C 871A 0411 94EA DB02 E193