On Thu, Aug 6, 2009 at 2:07 PM, Clinton Stimpson<clin...@elemtech.com> wrote: > 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) > >
This worked for me after adding these lines before the above solution: IF(CMAKE_CL_64) SET(CMAKE_MSVC_ARCH amd64) ELSE(CMAKE_CL_64) SET(CMAKE_MSVC_ARCH x86) ENDIF(CMAKE_CL_64) John _______________________________________________ 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