kto

I'm trying to deploy an application built with VC 2005. It includes few DLLs which might be called by other components than my own. I'm using dynamic linking so the only option is to have the runtime-libraries installed as shared assemblies.

So far I haven't found a solution which wouldn't be based on either using MSI with merge modules, ClickOnce or vcredist_x86.exe. None of these is suitable in my case.

This will be a public deployment so requiring runtime-libraries to be present on target computers is not an option either.

My current workaround is to use static linking, but I would really like to go with dynamic linking instead.

Any ideas How can one install CRT libraries as shared assemblies without using MSI




Re: Visual C++ General How to deploy CRT as a shared assembly without using MSI, ClickOnce or vcredist_x86.exe?

Bite Qiu - MSFT

Hello

Apart from the deployment methods you mentioned above, there is a XCopy deployment method you didn't mentioned, XCopy is mainly used to redistribute debug version of visual c++ libraries but it is absolutely capable to deploy release version as well. From your description, it is not clear that why other deployment methods does not applicable. Without knowing the specific reason of that, suggestions may answer the question in title, but may not help you to solve the problem at all.

regards,

rico






Re: Visual C++ General How to deploy CRT as a shared assembly without using MSI, ClickOnce or vcredist_x86.exe?

kto

Unfortunately the XCopy deployment method also includes running the vcredist_x86.exe on the target computer. vcredist_x86.exe includes a .msi package inside so the installation in the end is actually done with MSI.

My problem is that the installation should happen without MSI involved.

Is there any public documentation available about shared assemblies installation I know how to install the files in correct locations, but I guess those need to be also somehow registered to the system I took a look inside the MSI inside the vcredist_x86.exe, it runs a custom action "Install" from a DLL included in the package. I would like to know what actions are performed by that helper DLL...








Re: Visual C++ General How to deploy CRT as a shared assembly without using MSI, ClickOnce or vcredist_x86.exe?

Bite Qiu - MSFT

You should make use of Global Assembly Cache Tool (gacutil.exe), especially its /i option that can install an strong named assembly to the GAC:

Code Snippet
gacutil /i foo.dll

For more information, please see: http://msdn2.microsoft.com/en-us/library/ex0ss12c(VS.80).aspx

hope it helps

rico






Re: Visual C++ General How to deploy CRT as a shared assembly without using MSI, ClickOnce or vcredist_x86.exe?

kto

All right! Thanks Rico.

Found this link from the msdn page pointed by you: http://support.microsoft.com/default.aspx scid=kb;en-us;317540

It looks like it's exactly what I'm after.






Re: Visual C++ General How to deploy CRT as a shared assembly without using MSI, ClickOnce or vcredist_x86.exe?

Bite Qiu - MSFT

Through further investigation, I found that gacutil.exe cannot meet your requirement since it is only for .NET assemblies, VC++ libraries are win32 assemblies and normally they are installed in native assembly cache(winSxS) as side-by-side assemblies. To install win32 assemblies as side-by-side assemblies, MSI is the best option, you can try to make use of side-by-side assembly API, call CreateAssemblyCache and then IAssemblyCache::InstallAssembly may get things done without MSI, for the reference to these APIs, please see: http://msdn2.microsoft.com/en-us/library/aa376204.aspx,

As I don't see any specific reason that shared assembly is needed, so probably private deployment is also an option, for private deployment you can refer to the link I mentioned in previous post.

Please correct me if I missed anything.

hope it helps

rico