none
SP1 and WinSXS RRS feed

  • Question

  • What will be placed in the WinSXS directory when SP1 is installed? Will there be a new MSVCR80.dll and more importantly, will there be a policy file that redirects the binding of the original dll to the new dll?
    Wednesday, October 18, 2006 7:20 PM

Answers

  • Yes, the new versions will be placed in the WinSxS directory (different version number).  The old ones will remain as well.  Yes, the policy file will redirect the binding of the original to the new.  Any new apps compiled with SP1 will use the new one and only the new one (or you can define _USE_RTM_VERSION to allow it to work with the original)
    Wednesday, October 18, 2006 8:57 PM
  • _USE_RTM_VERSION is newly introduced in SP1 (and previously also in hotfix 919280).   It is found in crtassem.h and crtdefs.h.  That's why you probably cannot find it yet in google and your existing vc include files.

    If you use _USE_RTM_VERSION - it must be done in all EXEs and DLLs the app uses.  The _USE_RTM_VERSION define determines which CRT version is placed in your manifest file. If it is defined, then the old version number is put in.  If not defined, then it puts the new version in (what ever version ends up shipping with SP1)

    And no, using _USE_RTM_VERSION does not avoid the runtime rebinding to the new version.  The fact is, it only gives the apps the ability to use the originals, but if the new ones are there on the machine in WinSxS, then it uses the new ones instead.  Without _USE_RTM_VERSION, if the originals are there and the new ones aren't, then the app doesn't even run.

    Without using WinSxS, even if you install applocal and if same or newer versions exist in WinSxS, then those in WinSxS will be used instead.  However, there is one way to trick the system into never using the new ones from WinSxS, and only using your applocal (original) ones.  For more info see

    http://blog.kalmbachnet.de/?postid=80

    I know of no way to force an app to use a specific version out of WinSxS, if a redirection policy has been installed.

    Tuesday, October 31, 2006 11:02 PM

All replies

  • Yes, the new versions will be placed in the WinSxS directory (different version number).  The old ones will remain as well.  Yes, the policy file will redirect the binding of the original to the new.  Any new apps compiled with SP1 will use the new one and only the new one (or you can define _USE_RTM_VERSION to allow it to work with the original)
    Wednesday, October 18, 2006 8:57 PM
  • I have googled for _USE_RTM_VERSION and searched the vc include directories and have come up empty. I have a large and complicated application. I am wondering if there is a way to make sure that the app always runs with a specific set of Microsoft supplied DLLs on client machines regardless of whether the SP DLLs are in the WinSXS directory or not.

    If I use _USE_RTM_VERSION, do I only have to compile the executable using that setting or must all the relevant dlls the app uses need to be rebuilt with it? I ask that because I have a large number of suppliers that provide dlls and some of them will be moving to SP1 and I will not be able to control the use of _USE_RTM_VERSION when they build their dlls.

    When it comes to the policy file, does compiling my executable with_USE_RTM_VERSION keep windows from doing the rebinding on customer machines that have the new dlls and policy files installed (that is, what are the semantics of _USE_RTM_VERSION?) Or is there a policy file an administrator can apply to specific applications that override the individual policies in the WinSXS assembly cache? Perhaps I can bypass the policy driven rebinding with a manifest file for my executable?

    Maybe I am making this too hard. Regardless of all the dll issues, if I deliver the RTM dlls in the directory containing my application will I bypass the WinSXS and the policy rebinding?

    Tuesday, October 31, 2006 7:25 PM
  • _USE_RTM_VERSION is newly introduced in SP1 (and previously also in hotfix 919280).   It is found in crtassem.h and crtdefs.h.  That's why you probably cannot find it yet in google and your existing vc include files.

    If you use _USE_RTM_VERSION - it must be done in all EXEs and DLLs the app uses.  The _USE_RTM_VERSION define determines which CRT version is placed in your manifest file. If it is defined, then the old version number is put in.  If not defined, then it puts the new version in (what ever version ends up shipping with SP1)

    And no, using _USE_RTM_VERSION does not avoid the runtime rebinding to the new version.  The fact is, it only gives the apps the ability to use the originals, but if the new ones are there on the machine in WinSxS, then it uses the new ones instead.  Without _USE_RTM_VERSION, if the originals are there and the new ones aren't, then the app doesn't even run.

    Without using WinSxS, even if you install applocal and if same or newer versions exist in WinSxS, then those in WinSxS will be used instead.  However, there is one way to trick the system into never using the new ones from WinSxS, and only using your applocal (original) ones.  For more info see

    http://blog.kalmbachnet.de/?postid=80

    I know of no way to force an app to use a specific version out of WinSxS, if a redirection policy has been installed.

    Tuesday, October 31, 2006 11:02 PM