Can’t upgrade Exchange 2010 – “The service cannot be started”

The time had come to install SP3 on Exchange 2010. Things hadn’t worked, with nothing useful in the logs, when I tried to apply all the SP2 update rollups, so I thought I’d skip them and go straight to Service Pack 3.

I had a few odd issues to begin with:

  1. For some reason it thought I had Windows Update running. I didn’t.
  2. Then it got through the “readiness checks” but failed because “beremote” (Symantec Backup Exec was running – I killed it and tried again.
  3. Then it got through the checks again but failed because it couldn’t find Active Directory on our Domain Controller. Even though it had done previously. Um. Reboot.
  4. Finally, the update started, but got to installing the “Hub Transport Role” and failed.

The error message said “MSExchangeServiceHost cannot be started due to the following error: Cannot start service MSExchangeServiceHost on computer “.””. Strange.

Looking at the services, I found that all of the services for Exchange (like IMAP3, Transport and – yes – Service Host) were set to disabled. I know not why. So I set them all to manual (which was tedious, as there were 16-odd to do), and tried the install of SP3 again.

Checks – OK. Install – started. Hub Transport – failed. Same message.

I looked at the services again, and they were all disabled. Again. What.

I set about changing them all to manual again, and once more started the install. The most annoying thing about this whole process was that the checks take a good 15 minutes, and the install – up to the point of failing – takes another 30-40 minutes, so it was taking ages each time. Anyway, as the install progressed this time, I kept an eye on the services, refreshing them. And lo – they change by themselves to disabled. Alas, I wasn’t quick enough to keep up with the changes and the update failed yet again.

Thankfully, I’m not the first to have this problem. A Google search led me to here, where the solution was revealed in the comments: Powershell.

I rarely use Powershell. I don’t know much about it, and I don’t like to poke around in it just in case. However, an anonymous poster on that link came up with this simple command:

Get-Service MSEx* | Set-Service -Startuptype manual

Bang that into Powershell, and all the Exchange services get set to (you guessed it) manual. Sadly, that doesn’t prevent the SP3 installer changing them back to disabled as it feels like it, but it does mean you can change them all back, instantly. And, with judicious use of the Up arrow and Return key, you can send the command over and over and over for the entire 45 or more minutes that SP3 takes to install. Like I did. Tedious. Painful on the fingers. Job Done.

People with more Powershell savviness could probably put this in a loop and spare themselves the RSI.

Finally, and something Mr Anonymous didn’t mention, was that those services needed to be returned to “automatic” before rebooting the server, for hopefully obvious reasons. Since I was in Powershell I guessed at how to do this (and I’m sure you’ve guessed it too…):

Get-Service MSEx* | Set-Service -Startuptype automatic

Interestingly, what I didn’t notice about Clint’s blog post at first, was that he got the same issue with Exchange 2010 SP1, not SP3, and one of the other commenters found it in SP2 as well. Nice to see Microsoft fix these things.

6 thoughts on “Can’t upgrade Exchange 2010 – “The service cannot be started””

  1. SP2 was a pain too, but only because it took aaaaaaages and then didn’t work until we’d rebooted twice. We installed SP1 as we installed 2010 so that wasn’t an issue either, thankfully.

  2. here is a good loop shell command you can run:

    for ($i) {
    Get-Service wsbexchange | Set-Service -Startuptype manual
    Get-Service MSEx* | Set-Service -Startuptype manual
    start-sleep -seconds 1

    1. SInce my post I’ve become a bit more able with Powershell so I’d have been able to work that out for myself, but I never came back to update the post. Thanks!

  3. Another loop to set them every 10 seconds (CTRL+C to break out). Using Display Name picks up a few more services.
    do {Get-Service -DisplayName “Microsoft Exchange*”| Set-Service -Startuptype manual; start-sleep 10;} until (1 -eq 0)

Leave a Reply