Going Deep

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

Download this episode

Download Video

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

Format

Available formats for this video:

Actual format may change based on video formats available and browser capability.

    The Discussion

    • athan
      Interesting but overcomplicated guidelines that nobody knows, reads or follows.
      Thanks anyway Smiley
    • 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
    • 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.
    • 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.)
    • 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.
    • 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?
    • 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.
    • 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
    • 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...
    • 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?

    • 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?
    • 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.
    • JoshRoss
      @Dark_Halmut

      Are you running the lastest Version: 1.0.21115.0?
    • 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.


    • 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.
    • Frank Hileman
      Thanks, littleguru. I assumed we were being forced to use a technology.
    • 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
    • glebd
      Another sad example of how Microsoft manages to overcomplicate things. This is DLL hell, reloaded.
    • Ted.dot
      hire Ludvig Strigeus.
    • mrblob
      Please explain how can this become DLL hell - reloaded?

      TA.

    Comments closed

    Comments have been closed since this content was published more than 30 days ago, but if you'd like to continue the conversation, please create a new thread in our Forums, or Contact Us and let us know.