Wrong Microsoft_VC90_CRT_x86.msm merge module

  • Thread starter Thread starter cristalink
  • Start date Start date
C

cristalink

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\Microsoft_VC90_CRT_x86.msm" and
"policy_9_0_Microsoft_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.FileLoadException: Could not load file or
assembly MyDLL, Version=3.95.4.0, Culture=neutral, PublicK
eyToken=f26dd1c6f19dbf78' 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=f26dd1c6f19dbf78' --->
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.Main(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_policy.9.0.Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_x-ww_b7353f75\
contains two files: 9.0.21022.8.policy and 9.0.30729.1.policy.The latter
apparenhtrly redirects 21022 to 30729:

9.0.30729.1.policy:
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC90.CRT"
processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/>
<bindingRedirect oldVersion="9.0.20718.0-9.0.21022.8"
newVersion="9.0.30729.1"/>
<bindingRedirect oldVersion="9.0.30201.0-9.0.30729.1"
newVersion="9.0.30729.1"/>
</dependentAssembly>

The problem is, there is the
WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.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_Microsoft_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.policy", 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_Microsoft_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
 
Never mind, it turned out that that particular msm file wasn't propely
updated by VS2008 SP1.



cristalink said:
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\Microsoft_VC90_CRT_x86.msm" and
"policy_9_0_Microsoft_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.FileLoadException: Could not load file or
assembly MyDLL, Version=3.95.4.0, Culture=neutral, PublicK
eyToken=f26dd1c6f19dbf78' 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=f26dd1c6f19dbf78' --->
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.Main(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_policy.9.0.Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_x-ww_b7353f75\
contains two files: 9.0.21022.8.policy and 9.0.30729.1.policy.The latter
apparenhtrly redirects 21022 to 30729:

9.0.30729.1.policy:
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC90.CRT"
processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/>
<bindingRedirect oldVersion="9.0.20718.0-9.0.21022.8"
newVersion="9.0.30729.1"/>
<bindingRedirect oldVersion="9.0.30201.0-9.0.30729.1"
newVersion="9.0.30729.1"/>
</dependentAssembly>

The problem is, there is the
WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.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_Microsoft_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.policy", 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_Microsoft_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
 
Back
Top