Wrong Microsoft_VC90_CRT_x86.msm merge module

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • cristalink

    Wrong Microsoft_VC90_CRT_x86.msm merge module

    Hi,

    I have MS Visual Studio 2008 both Pro and Dev Team Edition SP1 installed.
    I've compiled a managed C++ .DLL which automatically had a manifest
    embedded, with the following dependency: "Microsoft.VC90 .CRT" "9.0.21022. 8"
    "x86".

    I created an MSI package with the following merge modules: "Program
    Files\Common Files\Merge Modules\Microso ft_VC90_CRT_x86 .msm" and
    "policy_9_0_Mic rosoft_VC90_CRT _x86.msm".

    When I install the package on Windows Server 2003 SP2 32bit with .NET 3.5,
    an executable linked to the DLL won't load saying:

    Unhandled Exception: System.IO.FileL oadException: Could not load file or
    assembly MyDLL, Version=3.95.4. 0, Culture=neutral , PublicK
    eyToken=f26dd1c 6f19dbf78' or one of its dependencies. This application has
    failed to start because the application configuration is incorrect. Re
    installing the application may fix this problem. (Exception from HRESULT:
    0x800736B1)
    File name: 'MyDLL, Version=3.95.4. 0, Culture=neutral ,
    PublicKeyToken= f26dd1c6f19dbf7 8' --->
    System.Runtime. InteropServices .COMExcept
    ion (0x800736B1): This application has failed to start because the
    application configuration is incorrect. Reinstalling the application may fix
    t
    his problem. (Exception from HRESULT: 0x800736B1)
    at Test.Program.Ma in(String[] args)

    The following event is logged:

    Resolve Partial Assembly failed for Microsoft.VC90. CRT. Reference error
    message: The referenced assembly is not installed on your system.

    I suspect the above issue is because of the following.

    WINDOWS\WinSxS\ Policies\x86_po licy.9.0.Micros oft.VC90.CRT_1f c8b3b9a1e18e3b_ x-ww_b7353f75\
    contains two files: 9.0.21022.8.pol icy and 9.0.30729.1.pol icy.The latter
    apparenhtrly redirects 21022 to 30729:

    9.0.30729.1.pol icy:
    <dependentAssem bly>
    <assemblyIdenti ty type="win32" name="Microsoft .VC90.CRT"
    processorArchit ecture="x86" publicKeyToken= "1fc8b3b9a1e18e 3b"/>
    <bindingRedirec t oldVersion="9.0 .20718.0-9.0.21022.8"
    newVersion="9.0 .30729.1"/>
    <bindingRedirec t oldVersion="9.0 .30201.0-9.0.30729.1"
    newVersion="9.0 .30729.1"/>
    </dependentAssemb ly>

    The problem is, there is the
    WINDOWS\WinSxS\ x86_Microsoft.V C90.CRT_1fc8b3b 9a1e18e3b_9.0.2 1022.8_x-ww_d08d0375
    folder, but there is no the one with CRT 30729.

    I checked the Microsoft_VC90_ CRT_x86.msm merge module, and it does NOT
    contain CRT 30729, that's why the newer CRT is not installed. However,
    policy_9_0_Micr osoft_VC90_CRT_ x86.msm DOES contain the policy file for CRT
    30729. I checked my Microsoft_VC90_ CRT_x86.msm against VS 2008 ISO images,
    and it matches the files in both VS2008 Pro and VS2008 Dev Team.

    I checked the x64 and ia64 merge modules, and they DO contain CRT 30729.

    I deleted "9.0.30729.1.po licy", and my DLL started to load.

    So the problem is that:
    - Microsoft_VC90_ CRT_x86.msm doesn't contain CRT 30729 for some reason
    - policy_9_0_Micr osoft_VC90_CRT_ x86.msm contains the redirection manifest
    for CRT 30729
    - NOTE: x64 and ia64 merge modules are fine.

    The question is, where do I get the correct Microsoft_VC90_ CRT_x86.msm merge
    module?

    Thank you,

    Nick

  • cristalink

    #2
    Re: Wrong Microsoft_VC90_ CRT_x86.msm merge module

    Never mind, it turned out that that particular msm file wasn't propely
    updated by VS2008 SP1.



    "cristalink " <cristalink@noe mail.noemailwro te in message
    news:%23nva5s6N JHA.1164@TK2MSF TNGP02.phx.gbl. ..
    Hi,
    >
    I have MS Visual Studio 2008 both Pro and Dev Team Edition SP1 installed.
    I've compiled a managed C++ .DLL which automatically had a manifest
    embedded, with the following dependency: "Microsoft.VC90 .CRT"
    "9.0.21022. 8" "x86".
    >
    I created an MSI package with the following merge modules: "Program
    Files\Common Files\Merge Modules\Microso ft_VC90_CRT_x86 .msm" and
    "policy_9_0_Mic rosoft_VC90_CRT _x86.msm".
    >
    When I install the package on Windows Server 2003 SP2 32bit with .NET 3.5,
    an executable linked to the DLL won't load saying:
    >
    Unhandled Exception: System.IO.FileL oadException: Could not load file or
    assembly MyDLL, Version=3.95.4. 0, Culture=neutral , PublicK
    eyToken=f26dd1c 6f19dbf78' or one of its dependencies. This application has
    failed to start because the application configuration is incorrect. Re
    installing the application may fix this problem. (Exception from HRESULT:
    0x800736B1)
    File name: 'MyDLL, Version=3.95.4. 0, Culture=neutral ,
    PublicKeyToken= f26dd1c6f19dbf7 8' --->
    System.Runtime. InteropServices .COMExcept
    ion (0x800736B1): This application has failed to start because the
    application configuration is incorrect. Reinstalling the application may
    fix t
    his problem. (Exception from HRESULT: 0x800736B1)
    at Test.Program.Ma in(String[] args)
    >
    The following event is logged:
    >
    Resolve Partial Assembly failed for Microsoft.VC90. CRT. Reference error
    message: The referenced assembly is not installed on your system.
    >
    I suspect the above issue is because of the following.
    >
    WINDOWS\WinSxS\ Policies\x86_po licy.9.0.Micros oft.VC90.CRT_1f c8b3b9a1e18e3b_ x-ww_b7353f75\
    contains two files: 9.0.21022.8.pol icy and 9.0.30729.1.pol icy.The latter
    apparenhtrly redirects 21022 to 30729:
    >
    9.0.30729.1.pol icy:
    <dependentAssem bly>
    <assemblyIdenti ty type="win32" name="Microsoft .VC90.CRT"
    processorArchit ecture="x86" publicKeyToken= "1fc8b3b9a1e18e 3b"/>
    <bindingRedirec t oldVersion="9.0 .20718.0-9.0.21022.8"
    newVersion="9.0 .30729.1"/>
    <bindingRedirec t oldVersion="9.0 .30201.0-9.0.30729.1"
    newVersion="9.0 .30729.1"/>
    </dependentAssemb ly>
    >
    The problem is, there is the
    WINDOWS\WinSxS\ x86_Microsoft.V C90.CRT_1fc8b3b 9a1e18e3b_9.0.2 1022.8_x-ww_d08d0375
    folder, but there is no the one with CRT 30729.
    >
    I checked the Microsoft_VC90_ CRT_x86.msm merge module, and it does NOT
    contain CRT 30729, that's why the newer CRT is not installed. However,
    policy_9_0_Micr osoft_VC90_CRT_ x86.msm DOES contain the policy file for CRT
    30729. I checked my Microsoft_VC90_ CRT_x86.msm against VS 2008 ISO images,
    and it matches the files in both VS2008 Pro and VS2008 Dev Team.
    >
    I checked the x64 and ia64 merge modules, and they DO contain CRT 30729.
    >
    I deleted "9.0.30729.1.po licy", and my DLL started to load.
    >
    So the problem is that:
    - Microsoft_VC90_ CRT_x86.msm doesn't contain CRT 30729 for some reason
    - policy_9_0_Micr osoft_VC90_CRT_ x86.msm contains the redirection manifest
    for CRT 30729
    - NOTE: x64 and ia64 merge modules are fine.
    >
    The question is, where do I get the correct Microsoft_VC90_ CRT_x86.msm
    merge module?
    >
    Thank you,
    >
    Nick
    >

    Comment

    Working...