Everything you wanted to know about VC++ deployment but were afraid to ask

Sign in to queue

Description

After C++ code has been written, compiled and tested it's now time for figuring out how to deploy it successfully on n number of users' machines and their various configurations... This is no easy task given the number of potential versioning conflicts. Of course, there are ways to do this, many of them automatic in nature, but which way is the best way? How do the various methodologies of delploying exes and dlls on machines stack up? How does it all work? Deployment is one of those things that many of us take for granted, but George Mileka and Ben Anderson of the Visual C++ team spend much of their time thinking about the process of deploying code to any number of machines so we don't have to. Tune in and learn about the nitty gritty of VC deployment. There is plenty of whiteboarding in this one so be sure to put your propeller caps on.

Tags:

C++, Deployment

Embed

Download

Download this episode

The Discussion

  • User profile image
    athan
    Interesting but overcomplicated guidelines that nobody knows, reads or follows.
    Thanks anyway Smiley
  • User profile image
    Charles
    sakisp wrote:
    Interesting but overcomplicated guidelines that nobody knows, reads or follows.
    Thanks anyway


    Interesting point of view. I don't agree, however. Follow these guidelines! They will save you from much grief... Smiley
    C
  • User profile image
    athan
    Charles wrote:
    Interesting point of view. I don't agree, however. Follow these guidelines! They will save you from much grief...


    I do that Charles whenever is possible, but I was not talking about me.
    Most of the software industry "big-names" (not to mention 99% of shareware vendors), ignore these guidelines when designing their products deployment.
  • User profile image
    graboy
    Sorry but you've managed to make the process of distributing .dlls harder and less reliable than it ever has been.

    (SXS will likely join the registry and UAC in the legendary "it sounded good on paper" pile.)
  • User profile image
    odujosh
    sakisp wrote:
    
    Charles wrote:
    Interesting point of view. I don't agree, however. Follow these guidelines! They will save you from much grief...


    I do that Charles whenever is possible, but I was not talking about me.
    Most of the software industry "big-names" (not to mention 99% of shareware vendors), ignore these guidelines when designing their products deployment.


    Wow you must be a busy guy working with so many companies to make such generalizations. So do you hop companies every week. Or are you making something up to have a point. I vote for the latter.
  • User profile image
    giovanni
    Just out of curiosity, what approach deos Mac OS X uses (I know they don't have dlls, but they still heave lilbraries, etc.)?

    Do they link everything in the binaries? How are updates taken care of in that case?
  • User profile image
    FluffyDevil​Bunny
    MacOS does use dlls or sos. It gives the appearance that they don't exist because the application you are clicking on is actually a directory with an extension of .app. Everything the application depends on is in the directory so when you drag it around places, everything goes with it. As for shared dlls, they are stored in the library directory. The application contains a manifest that tells it which libraries it relies on. Its all very simple.
  • User profile image
    DouglasH
    FluffyDevilBunny wrote:
    MacOS does use dlls or sos. It gives the appearance that they don't exist because the application you are clicking on is actually a directory with an extension of .app. Everything the application depends on is in the directory so when you drag it around places, everything goes with it. As for shared dlls, they are stored in the library directory. The application contains a manifest that tells it which libraries it relies on. Its all very simple.


    so in theory MacOS can still suffer from dll hell unless the library directory stores multiple versions of the Library. 

    Douglash
  • User profile image
    giovanni
    FluffyDevilBunny wrote:
    MacOS does use dlls or sos. It gives the appearance that they don't exist because the application you are clicking on is actually a directory with an extension of .app. Everything the application depends on is in the directory so when you drag it around places, everything goes with it. As for shared dlls, they are stored in the library directory. The application contains a manifest that tells it which libraries it relies on. Its all very simple.


    Well, it does not look substantially different from Windows...
  • User profile image
    athan
    odujosh wrote:
    Wow you must be a busy guy working with so many companies to make such generalizations. So do you hop companies every week. Or are you making something up to have a point. I vote for the latter.


    No, I'm not a "busy guy working with many companies". I'm just a regular tech guy who has deployed hundreds of commercial applications during my life.  Do you think it's too difficult to recognize a messed up installation?

  • User profile image
    JoshRoss
    When the Office Ribbon updates comes, being off band, will there be another VC redist? And why is producing ClickOnce deployments so complicated for native C++ apps? It's not like disk space is an issue... Is disk space an issue?
  • User profile image
    KeyboardG
    These silverlight players are killing me. Everytime I load channel9 my entire ie locks, even other tabs for near 30 seconds just to load that picture. Its really an unacceptable freeze. Can't you guys load the page and then load the player in an AJAX panel so I can continue other tasks?

    sry, its been getting on my nerves since channel9 switched players. I appreciate your efforts.
  • User profile image
    JoshRoss
    @Dark_Halmut

    Are you running the lastest Version: 1.0.21115.0?
  • User profile image
    cheong
    DouglasH wrote:
    
    FluffyDevilBunny wrote:
    MacOS does use dlls or sos. It gives the appearance that they don't exist because the application you are clicking on is actually a directory with an extension of .app. Everything the application depends on is in the directory so when you drag it around places, everything goes with it. As for shared dlls, they are stored in the library directory. The application contains a manifest that tells it which libraries it relies on. Its all very simple.


    so in theory MacOS can still suffer from dll hell unless the library directory stores multiple versions of the Library. 

    Douglash

    Linux systems (I believe it's also in most *nix systems) store the dynamic link libraries in /lib and /usr/lib. with .so(dynamic-linked) or .a(static-linked) in extension.

    And they put the version number at the end of the file. Then provide symbolic link to the filename without version in extension as the current version.

    ======

    So you'll see:

    libsomething.so -> libsomething.so.4.3.3
    libsomething.so.3 -> libsomething.so.3.1.0
    libsomething.so.4 -> libsomething.so.4.3.3
    libsomething.so.3.1.0
    libsomething.so.4.3.1
    libsomething.so.4.3.3

    In some system that doesn't use package management systems.

    ======

    Note that on most systems, some of these libraries are left behind intensionally for backward compatibility reasons. (e.g.: the *-compat packages)

    If you install an application that requires previous version of glibc runtime, just install the current version of glibc-compat and you'll get all the previous versions of glibc-runtime. That's how they solve the DLL hell problem.


  • User profile image
    littleguru
    offtopic follows:

    Dark_Halmut wrote:
    These silverlight players are killing me. Everytime I load channel9 my entire ie locks, even other tabs for near 30 seconds just to load that picture. Its really an unacceptable freeze. Can't you guys load the page and then load the player in an AJAX panel so I can continue other tasks?

    sry, its been getting on my nerves since channel9 switched players. I appreciate your efforts.


    You can op out... Go to your profile -> settings and disable silverlight for the player.
  • User profile image
    Frank Hileman
    Thanks, littleguru. I assumed we were being forced to use a technology.
  • User profile image
    benjaman
    Josh - when we ship QFEs and SPs, we update all redist mechanisms, including app-local DLLs, MSMs and VCRedist*.exe as part of the patch to Visual Studio.  I believe we will do the same for the MFC update (although, since it is in the future, I can't say with exact certainty that it will be that way, but that's the current plan as far as I know).

    -Ben
  • User profile image
    glebd
    Another sad example of how Microsoft manages to overcomplicate things. This is DLL hell, reloaded.
  • User profile image
    Ted.dot
    hire Ludvig Strigeus.
  • User profile image
    mrblob
    Please explain how can this become DLL hell - reloaded?

    TA.

Add Your 2 Cents