Bill Hoffman wrote:
James Bigler wrote:
I've just been bitten hard by this issue (many hours of frustration while attempting to run a demo application that should have "Just Worked" (TM) ).

According to this page:

http://support.microsoft.com/kb/326922


"You should install these versions of the CRT on target computers by running the Vcredist_x86.exe application that is included with Visual Studio." This is for the VS 2005 and 2008 versions of the C run-time libraries except for Windows 2000 in which case you need to install them in the system32 directory.

I was dropping Msvcr80.dll and friends as per InstallRequiredSystemLibraries next to the binaries with ineffectual results. It was really strange, because programs like Dependency Walker seemed to find them just fine. It was only after running vcredist_x86.exe that I was able to run my programs properly.

I though I should tell everyone that this method of distributing Msvcr80.dll and Msvcr90.dll next to your binaries is not supposed to work. You must install them into the Windows Side by Side location (WinSxS) using the CRT.msm merge module or the vcredist_x86.exe that comes with Visual Studio.

Now to try and get CPack to tell NSIS run the vcredist_x86.exe program during installation.

Note, that many people might get lucky and have already installed a product that installed the right vcredist_x86.exe before installing your software.


No this works fine.... However you may be running into this issue:

"
Visual Studio 9 SP 1 has a bug that will cause trouble with cpack.


You can read about it here:

https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=361682


Basically, when you compile an executable or dll with VS9 SP1 it embeds
manifest information into the the exe or dll that does not match the
version information in the manifest files that SP 1 provides for
redistribution.
"

We use the InstallRequiredSystemLibraries all the time without requiring vcredist_x86.exe to be run.

There are some cases it doesn't work (3rd party libraries you can't compile yourself). I don't have two installs of the same Visual Studio versions with different service packs, so, here's what I do.

   IF(MSVC80)
FIND_PROGRAM(MSVC_REDIST NAMES vcredist_${CMAKE_MSVC_ARCH}/vcredist_${CMAKE_MSVC_ARCH}.exe
       PATHS
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0;InstallDir]/../../SDK/v2.0/BootStrapper/Packages/" "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\VisualStudio\\8.0;InstallDir]/../../SDK/v2.0/BootStrapper/Packages/"
       )
     GET_FILENAME_COMPONENT(vcredist_name "${MSVC_REDIST}" NAME)
     INSTALL(PROGRAMS ${MSVC_REDIST} COMPONENT Runtime DESTINATION bin)
SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "ExecWait '\\\"$INSTDIR\\\\bin\\\\${vcredist_name}\\\"'")
   ENDIF(MSVC80)


Clint

_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to