SQL Server patch fails with "Could not find any resources appropriate for the specified culture or the neutral culture"

I recently worked on a number of issues where SQL Server Service Pack/patch installation would fail, and we would see this error in the relevant Detail.txt (located in C:Program FilesMicrosoft SQL Server100Setup BootstrapLog<Date time of the installation attempt> for SQL 2008/2008 R2):

2013-04-07 20:14:07 Slp: Package sql_bids_Cpu64: - The path of cached MSI package is: C:WindowsInstaller5c23b5e.msi . The RTM product version is: 10.50.1600.1

2013-04-07 20:14:07 Slp: Error: Action "Microsoft.SqlServer.Configuration.SetupExtension.InitializeUIDataAction" threw an exception during execution.

2013-04-07 20:14:13 Slp: Received request to add the following file to Watson reporting: C:UserskalerahulAppDataLocalTemp2tmpCC09.tmp

2013-04-07 20:14:13 Slp: The following is an exception stack listing the exceptions in outermost to innermost order

2013-04-07 20:14:13 Slp: Inner exceptions are being indented

2013-04-07 20:14:13 Slp:

2013-04-07 20:14:13 Slp: Exception type: System.Resources.MissingManifestResourceException

2013-04-07 20:14:13 Slp: Message:

2013-04-07 20:14:13 Slp: Could not find any resources appropriate for the specified culture or the neutral culture. Make sure "Errors.resources" was correctly embedded or linked into assembly "Microsoft.SqlServer.Discovery" at compile time, or that all the satellite assemblies required are loadable and fully signed.

2013-04-07 20:14:13 Slp: Stack:

2013-04-07 20:14:13 Slp: at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean createIfNotExists, Boolean tryParents)

2013-04-07 20:14:13 Slp: at System.Resources.ResourceManager.GetObject(String name, CultureInfo culture, Boolean wrapUnmanagedMemStream)

2013-04-07 20:14:13 Slp: at Microsoft.SqlServer.Discovery.MsiException.GetErrorMessage(Int32 errorNumber, CultureInfo culture)

2013-04-07 20:14:13 Slp: at Microsoft.SqlServer.Discovery.MsiException.GetErrorMessage(MsiRecord errorRecord, CultureInfo culture)

2013-04-07 20:14:13 Slp: at Microsoft.SqlServer.Discovery.MsiException.get_Message()

2013-04-07 20:14:13 Slp: at System.Exception.ToString()

2013-04-07 20:14:13 Slp: at System.Exception.ToString()

2013-04-07 20:14:13 Slp: at System.Exception.ToString()

2013-04-07 20:14:13 Slp: at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionEngine.RunActionQueue()

2013-04-07 20:14:13 Slp: at Microsoft.SqlServer.Setup.Chainer.Workflow.Workflow.RunWorkflow(WorkflowObject workflowObject, HandleInternalException exceptionHandler)

2013-04-07 20:14:13 Slp: at Microsoft.SqlServer.Chainer.Setup.Setup.RunRequestedWorkflow()

2013-04-07 20:14:13 Slp: at Microsoft.SqlServer.Chainer.Setup.Setup.Run()

2013-04-07 20:14:13 Slp: at Microsoft.SqlServer.Chainer.Setup.Setup.Start()

2013-04-07 20:14:13 Slp: at Microsoft.SqlServer.Chainer.Setup.Setup.Main()

Now that's a weird and hard to understand error, isn't it? However, look closely at what the setup is trying to do, and you will see that it's trying to access the following file from the installer cache:

Open the installer cache and try to install the msi manually. If it succeeds, try running the patch setup again and it should proceed beyond the error this time. If the msi setup fails, then you will need to troubleshoot that first, before the patch setup proceeds further. This behaviour is expected, in that the service pack setup will try to access the msi's (Microsoft Installer files, installed with the base installation of SQL) and msp's (Microsoft Patch files, installed by Service packs, CU's and hotfixes) of each of the installed components of SQL Server. If it's unable to access/run any of these, the Service pack setup will fail.

Hope this helps.