Possible cause of 1935 error with HRESULT 0x8002802F

A while back, I posted an article describing causes of many types of 1935 errors that have been seen in the past.  I wanted to talk about one specific type of 1935 error in a little more detail and provide information about a possible root cause that I did not describe in that previous article.

A 1935 error in an MSI-based installations code is a catch-all for most of the possible assembly installation errors. In order to diagnose the problem in more detail, it is usually necessary to look at the verbose MSI log file.  In some cases, you will see an error like the following:

Error 1935. An error occurred during the installation of assembly '<myAssembly>'. Please refer to Help and Support for more information. HRESULT: 0x8002802F. assembly interface: , function: CreateAssemblyNameObject, component: {A7A9D92E-C67F-4E96-BB90-5A4147DAEF6B}

The key information needed to diagnose the exact root cause of a 1935 error is usually the HRESULT value listed in the verbose MSI log file.

The HRESULT value listed above is 0x8002802F (-2147319761), and it means "function not defined in specified DLL." There are a few possible root causes of this issue. The most common cause is that the file %windir%\system32\mscoree.dll is missing, corrupt or an incorrect version. In most cases, repairing the highest version of the .NET Framework on the system will correct any problems related to mscoree.dll and will resolve the problem if this is the case.

In a few less common cases, the file %windir%\system32\mscoree.dll is present, but registry values used by the .NET Framework to find and load specific versions of the .NET Framework are missing. The following values are required by mscoree.dll in order to load each version of the .NET Framework:

For the .NET Framework 2.0 (on an x86 version of Windows):

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
InstallRoot = C:\Windows\Microsoft.NET\Framework\

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Policy\Upgrades]
2.0.50727 = 1.0.0-2.0.50727

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Policy\v2.0]
50727 = 50727-50727

For the .NET Framework 2.0 (on an x64 version of Windows):

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
InstallRoot = C:\Windows\Microsoft.NET\Framework64\

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Policy\Upgrades]
2.0.50727 = 1.0.0-2.0.50727

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Policy\v2.0]
50727 = 50727-50727

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework]
InstallRoot = C:\Windows\Microsoft.NET\Framework\

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432NodeMicrosoft\.NETFramework\Policy\Upgrades]
2.0.50727 = 1.0.0-2.0.50727

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\Policy\v2.0]
50727 = 50727-50727

For the .NET Framework 1.1:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
InstallRoot = C:\Windows\Microsoft.NET\Framework\

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Policy\Upgrades]
1.1.4322 = 1.0.0.0 - 1.1.4322

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Policy\v1.1]
4322 = 3706-4322

For the .NET Framework 1.0:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
InstallRoot = C:\Windows\Microsoft.NET\Framework\

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Policy\v1.0]
3705 = 3321-3705

If any of the above registry values are missing on your system, you will need to manually add them in order to resolve 1935 errors with HRESULT value 0x8002802F.  Note that the InstallRoot value must be set to the exact location of the %windir% folder on your system, so you may need to adjust that value from the one listed above if your %windir% is not located at c:\Windows.

<update date="2/4/2008"> One of the values for the .NET Framework 1.0 was incorrect, so I fixed it </update>

<update date="12/16/2009"> Added 64-bit registry information for the .NET Framework 2.0. </update>