“Service reached limit of transient errors. Will shut down. Last error returned from Service Manager: 0x80029c4a” when trying to install .net Framework 3.0 on Server 2008 or .net Framework updates from Windows Update

System Requirements:

  • Windows Vista
  • Windows 7
  • Windows Server 2008, 2008 R2

The Problem:

So we had a server with a corrupted .net installation, Windows Update kept on trying to install a .net 3.5 QFE and failed it, which showed up on the SUS server error logs. Investigation revealed that it would not install the update.

After running the .net cleaner utility, Windows Update still insisted that the machine needed the QFE – despite the fact that .net 4, 3.5, 3.0, 2.0 and 1.x were not installed.

The next obvious step was to put .net back on the machine, starting with 3.0 in the Windows Server Manager ‘Features’ list. It would not reinstall the feature however terminating with

Service reached limit of transient errors. Will shut down. Last error returned from Service Manager: 0x80029c4a

There were two problems here

  1. A .net Framework update was stuck in the Windows Update Catalogue and could not be cleared (even by purging SoftwareDistribution)
  2. The .net Framework 3.0 feature could not be reinstalled onto the operating system via Windows Server Manager

The Fix

In this instance the following solved the problem:

  1. Browse to:
    C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG
  2. Check to see if there is a machine.config file present within the folder
  3. If there is not, make a copy of machine.config.default in the same folder and rename it to machine.config

Note that you may need to look through other folders under C:\Windows\Microsoft.NET\Framework for this .config file as the ‘v2.0.50727’ part changes with the service release.

 

Once this was done, .net 3.0 could be reinstalled from Windows Server Manager. Once that was done .net 3.5 SP1 could be reinstalled (along with .net 2.0 SP2 and .net 3.0 updates). This allowed the stuck update to actually install and cleared the original error from WSUS.

After that .net 4.0 went back on and everything on the server was back to normal again.

…the toe bone connected to the foot bone, and the foot bone connected to the ankle bone, and the ankle…

Error 0x80070005 when using SWbemLocator.ConnectServer to initiate a WMI session despite using the correct username and password

System Requirements:

  • WMI 1.5 or higher
  • Windows 95, 98, 98SE, Millennium
  • Windows NT 4.0, 2000, XP, 2003, Vista, 2008, 7

The Problem:

When using WMI’s SWbemLocator.ConnectServer class to log onto a remote system, you receive an 0x80070005 access denied error (Decimal -2147024891).

This error occurs even though the username and password are correct and the account credentials are synchronised properly between the local and remote machine – either by domain or manually in a workgroup.

More Info

The classfull connection line for using SWbemLocator is:

Set objWMIService = objSWbemLocator.ConnectServer(<computerName>, <wmiDefaultClassPath>, <username>, <password>)

for example:

Set objWMIService = objSWbemLocator.ConnectServer("192.168.0.100", "root\cimv2", "Administrator", "12345abcde")

The Fix

There is a very good chance that the problem you are having is to do with the username you are entering. You need to ensure that you are prefixing the username with the logon domain.

For example if your domain is camie.local your username should be camie\Administrator

Set objWMIService = objSWbemLocator.ConnectServer("192.168.0.100", "root\cimv2", "camie\Administrator", "12345abcde")

But I’m using a workgroup!

Don’t worry, you can do one of three things.

  1. Prefix the remote machine name (the local logon domain)
  2. Prefix the workgroup
  3. Send a null logon domain
Set objWMIService = objSWbemLocator.ConnectServer("192.168.0.100", "root\cimv2", "myHostName\Administrator", "12345abcde")

Set objWMIService = objSWbemLocator.ConnectServer("192.168.0.100", "root\cimv2", "workgroup\Administrator", "12345abcde")

Set objWMIService = objSWbemLocator.ConnectServer("192.168.0.100", "root\cimv2", "\Administrator", "12345abcde")

Using one of the above, you should be able to connect to the remote workstation. If you are dealing with a mix of workgroups or cannot know the hostname in advance I suggest using \<username> with I have tested to work on Windows 95 right through to Windows 7.

Unable to install Windows Server 2008 R1, Windows Vista or Windows 7 on a Dell PowerEdge 2600 – Setup error 0x80070022

System Requirements:

  • Dell PowerEdge 2600
  • Toshiba SD-C2502 DVD-ROM Drive

The Problem:

When you try and install an edition of NT 6 x86 on a Dell PowerEdge 2600 using self-created DVD media (DVD-R, DVD+R, DVD-RW, DVD+RW) the setup program takes a very long time to start and after around 30 minutes of “Expanding files” sitting on 0% setup fails with the error code 0x80070022.

More Info

The problem isn’t an incompatibility with the systems and NT6, it’s most likely the DVD ROM drive itself. You should of course check to make sure that the DVD-R(W) media that you are using is integral and hasn’t failed to burn properly. If the media works fine on other systems then check to see if the machine has a Toshiba SD-C2502 drive.

If it does then it is probably manufactured in or around August 2002 using firmware 1D13 (dates 03/08/2001) before all of the DVD media specifications were standardised. Dell unhelpfully neglected to supply the firmware update for the drive to support improved media compatibility. As you may have guessed, the media can get you into the setup program, but the slow speed is because of an increased number of forced read errors.

The Fix

The good news is that there is firmware available that may resolve this for you. Although Dell neglected to make it available on their PowerEdge support section, the drive is a plain old IDE drive, one that Dell used on a number of other systems. To be precise:

  • Inspiron 2500
  • Inspiron 2100
  • Inspiron 4100
  • Inspiron 8000
  • Inspiron 8100
  • Inspiron 2600
  • Inspiron 8200
  • Inspiron 2650
  • Inspiron 4150
  • Latitude C500
  • Latitude C510
  • Latitude C540
  • Latitude V710
  • Latitude LS
  • Latitude C400
  • Latitude C600
  • Latitude C610
  • Latitude C800
  • Latitude C810
  • Latitude L400
  • Latitude C640
  • Latitude V740
  • OptiPlex GX150
  • OptiPlex GX240
  • OptiPlex GX260
  • OptiPlex GX260N
  • Dell Precision Mobile WorkStation M50

So if you head to the support pages on Dell for one of those you will find the SD-C2502 firmware update which addresses:

This firmware addresses various readability related issues.

The firmware at shipping is 1D13, this updates it to 1D23 and will hopefully get you installing. If you want to search Dell Support for the file name look for br59016.exe

If that doesn’t fix it, it’s a standard IDE drive, simply grab one from any > 2003 laptop and you should be good to go.

Microsoft JET Database Engine error ‘80040e21’ – Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.

System Requirements:

  • Windows NT 4.0
  • Windows 2000
  • Windows XP
  • Windows Server 2003
  • Windows Vista
  • Windows Server 2008
  • Windows 7

The Problem:

When you attempt to connect to a Microsoft Access database using the ODBC provider Microsoft.Jet.OLEDB.4.0 you receive the error message:

Microsoft JET Database Engine error ‘80040e21’
Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done./path/file.asp, line ##

 

More Information:

There are a number of issues that can cause this error, they are poorly documented elsewhere online but the information is there; connection string, registry values slightly offset and so fourth. This document deals with one specific issue which is related to the idea of this being caused by an incompatible type value.

The chances of you running into this are quite extreme, however it is an issue in JET (Microsoft Access) that doesn’t exist in Microsoft SQL Server and thus if you are dealing with code transitioning you may want to know about the problem in this very extreme and unlikely situation.

You shouldn’t need to reboot to solve the problem, it didn’t in my case. However, if nothing happens do restart before progressing to the next step.

SQL Example

The following SQL Statement will execute on Microsoft SQL Server and return a RecordSet however the same SQL on JET 4.0 will result in the error message outlined above.

SELECT
Student.StudentID,
Student.FirstName,
Student.LastName,
Student.EMail,
null AS studentPhotoBLOB,
Left(StudentID,1) AS YearPrefix
FROM Student;

No, it isn’t the T-SQL LEFT() statement that is the problem. The issue lies in the “null AS studentPhotoBLOB”.

The idea behind this is that space has been reserved in the record set. Why would you want to do this? If you want to drop the record set directly into an array, then ADO can do this for you using the GetRecords method. However if you want to change the structure you have to re-parse the array and relocate the data into a new structure. You can inset a null named record and use the space in the GetRecords array later for other purposes.

The problem here is that null is not a data type that is supported by JET; it is supported by Microsoft SQL Server however.

The simplest way to remedy the situation is to either change the SQL or dynamically detect JET to change the variable type to a commonly supported data type, for example a String.

SELECT
Student.StudentID,
Student.FirstName,
Student.LastName,
Student.EMail,
” AS studentPhotoBLOB,
Left(StudentID,1) AS YearPrefix
FROM Student;

This is naughty, however in a weak typed language such as ASP it isn’t a real problem given the situation outlined above. The use of ” instead of null forces the data type of the column into a string and thus it can be parsed by JET.