zoukankan      html  css  js  c++  java
  • Deployment of VC2008 apps without installing anything

    If you create a default CRT/MFC application with VS2008, this application will not run on other computers. You application will complain with
    “This application has failed to start because the application configuration is incorrect”.

    The problem is that by default VC2008 uses the DLL-version of the CRT/MFC. These DLLs are not pre-installed on any OS.
    To overcome this problem, you have tree options:

    1. Statically link to the CRT/MFC
    2. Use vcredist_x86.exe / vcredist_x64.exe to install the DLLs in the system
    3. Deploy the CRT/MFC DLLs with your application (in the same directory)

    In the following I will explain the last option. Especially in conjunction with VS2008 service pack 1 (SP1). Because this leads to a little bit more compications in ApppLocal deployment.

    In general, it is very easy to deploy your application with the needed CRT/MFC DLLs.
    Just copy the contents of the directory

    • C:Program Files (x86)Microsoft Visual Studio 9.0VC edistx86Microsoft.VC90.CRT
    • C:Program Files (x86)Microsoft Visual Studio 9.0VC edistx86Microsoft.VC90.MFC

    into the same directory as your application. Then you should have the following files in your app-folder:

    Microsoft.VC90.CRT.manifest
    msvcr90.dll
    msvcp90.dll
    msvcm90.dll
    Microsoft.VC90.MFC.manifest
    mfc90.dll
    mfc90u.dll
    mfcm90.dll
    mfcm90u.dll
    

    Then your application works on an other computer!

    BUT: This does not work, if you installed VS2008-SP1 :-(

    The problem with VS2008 SP1 is: It overwrites all files in the “VC edist” directory with the new version. This is not really bad. The problem is: It has a newer version number inside the manifest files. But if you compile your application with VS2008-SP1 it write the RTM-version into the application manifest! Now the version number in your application manifest does not match the version in the “new” CRT/MFC manifest. Therefore it will refuse to load these DLLs and your application cannot start.

    The simplest way to overcome this problem is by changing the “Microsoft.VC90.CRT.manifest” and “Microsoft.VC90.MFC.manifest” files. Replace the version attribute in both Microfot.*.manifest files from “9.0.30729.1″ (or whatever version/SP you have) to the version number in your applications-manifest (which is normally “9.0.21022.8″ (RTM)).
    Old:

    version="9.0.30729.1"

    New:

    version="9.0.21022.8"

    Then your application will work on an OS without installing anything.

    Alternatively, you can change your applications manifest, so that it uses the new version number. This can easily done by defining

    #define _BIND_TO_CURRENT_VCLIBS_VERSION 1
    

    in stdafx.h (at the top) or in your project settings. This will embed the actual CRT/MFC-version into your applications manifest (works starting with VS2008-SP1).
    Also, if you use new features from the MFC-feature-pack, you should always define this!

    Just a small note: You should be aware, that this “AppLocal” installation is not really “AppLocal”… it is only AppLocal, if the vcredist_*.exe was not installed. If the vcredist_*.exe is installed, then the DLLs from the WinSxS directory will be used. If you want to prevent this, you can do a really AppLocal deployment.

    A small addition: If you write .NET-apps (/clr) you still must install the .NET Framework redistributable.

    But the goood news is: Starting with VC2010, the manifest (WinSxS) is gone ;)

    from:http://blog.kalmbach-software.de/2009/05/27/deployment-of-vc2008-apps-without-installing-anything/

  • 相关阅读:
    silverlight 会越来越好
    如何在C#里实现端口监视呢?
    我就这么活着
    无意间看到的两句话
    唉,心情
    有一种美丽的缘分,叫错过!
    HTML5之Canvas绘图——阴影效果呈现方法
    jQuery——动态给表格添加序号
    PHP代码——Curl实现网页代理proxy
    HTML5之Canvas绘图——Canvas画布调整之移动、缩放、旋转
  • 原文地址:https://www.cnblogs.com/lidabo/p/3484087.html
Copyright © 2011-2022 走看看