Error de Windows Installer al intentar actualizar a RU1 o RU2 de Exchange 2007 SP2 versión Española

Hola a todos,

Tras la disponibilidad de la actualización a RU1 y RU2 de Exchange 2007 SP2, nos hemos encontrado con bastantes casos de errores en la instalación que solo aparecen en la versión en Español.  En concreto se recibe el siguiente mensaje de error:

The upgrade patch cannot be installed by the Windows installer service because the program to be upgraded may be missing, or the upgrade patch may update a different version of the program.

Verify the the program to be upgraded exists on your computer and that you have the correct upgrade patch

 

 

Este error se encuentra reportado al grupo de producto de Exchange y en estos momentos se trabaja para su corrección.

 

El problema viene derivado de un valor incorrecto en el msi de instalación del SP2 en lenguaje Español, que indica que dicho paquete está instalado en idioma Ingles en vez de Español. En concreto la porpiedad incorrecta es la ProductLanguage que tiene un valor de 1033.

Por esta razón, cuando se intenta aplicar el RU1 o RU2, Windows Installer detecta dicha discrepancia y detiene la instalación. 

 

Como workaround se puede ejecutar un script que localice el msi correspondiente a la instalación del SP2 y modifique dicha propiedad estableciéndola a un valor de 3082 (Español)

 

El procedimiento para aplicar el script sería el siguiente:

 

1.- Hacer logon con un usuario administrador de dominio y por tanto administrador local del servidor de Exchange.  

2.- Copiar el contenido del script que se adjunta en un fichero de texto y renombrarlo a, por ejemplo script.vbs

3.- Abrir una ventana ms-dos (cmd) y situarnos en el directorio en el que hemos copiado el script

4.- Ejecutar el script con la siguiente línea de comandos

 

cscript script.vbs

 

5.- Deberían aparecer en pantalla la lista de paquetes msi instalados y el script debería detectar el msi correspondiente al SP2 y debería indicar que se ha modificado la propiedad ProductLanguage.

 

 

6.- Si todo es correcto probar a lanzar el setup del RU1 o RU2 y verificar que no se produzca el error de Windows Installer.

 

7.- Seguir con la instalación y verificar que todo es correcto.

 

 

SCRIPT

=======

 

‘***********************************************************************

‘ These sample scripts are not supported under any Microsoft standard

‘ support program or service.

‘ The sample scripts are provided as it is without warranty of any kind.

‘ Microsoft further disclaims all implied warranties including, without

‘ limitation, any implied warranties of merchantability or of fitness

‘ for a particular purpose.

‘ The entire risk arising out of the use or performance of the sample

‘ scripts and documentation remains with you. In no event shall

‘ Microsoft, its authors, or anyone else involved in the creation,

‘ production, or delivery of the scripts be liable for any damages

‘ whatsoever (including, without limitation, damages for loss of

‘ business profits, business interruption, loss of business information,

‘ or other pecuniary loss) arising out of the use of or inability to use

‘ the sample scripts or documentation, even if Microsoft has been

‘ advised of the possibility of such damages.

‘***********************************************************************

 

Const msiOpenDatabaseModeReadOnly = 0

Const msiOpenDatabaseModeTransact = 1

 

‘ Scan arguments for valid SQL keyword and to determine if any update operations

Dim openMode

openMode = msiOpenDatabaseModeReadOnly

openMode = msiOpenDatabaseModeTransact

 

‘ Connect to Windows installer object

Dim installer

Set installer = Nothing

Set installer = Wscript.CreateObject(“WindowsInstaller.Installer”)

CheckError

 

‘ Enumerate all products

Dim products

Set products = installer.Products

Dim productCode

Dim location

Set location = Nothing

Dim exchproductCode

exchproductCode = “{24B2C164-DE66-44FE-B468-A46D9D5E6B31}”

 

For Each productCode in products

     WScript.Echo “ProductCode = ” & productCode

     location  = installer.ProductInfo (productCode, “LocalPackage”)

     If productcode = exchproductCode Then

          WScript.Echo “**********************”

          WScript.Echo “ProductCode = ” & productcode

          WScript.Echo “Location = ” & location

          ChangeLanguage()

     End If

Next

 

Wscript.Quit 0

 

Sub ChangeLanguage

 

‘ Open the database

Dim databasePath

databasePath = location

Dim database

Set database = installer.OpenDatabase(databasePath, openMode)

CheckError

WScript.Echo “DatabasePath = ” & databasePath

 

‘Delete the existing ProductLanguage Property then added it back as 3082, Spanish

Dim view

Set view = database.OpenView(“Delete from Property where Property = ‘ProductLanguage'”)

view.Execute

wscript.echo “Property ProductLanguage removed”

Set view = database.OpenView(“INSERT INTO Property (Property,Value) VALUES (‘ProductLanguage’,3082)”)

view.Execute

wscript.echo “Property ProductLanguage added as 3082, Spanish”

database.Commit

 

End Sub

 

Sub CheckError

Dim message, errRec

If Err = 0 Then Exit Sub

message = Err.Source & ” ” & Hex(Err) & “: ” & Err.Description

If Not installer Is Nothing Then Set errRec = installer.LastErrorRecord

If Not errRec Is Nothing Then message = message & vbLf & errRec.FormatText

 

Fail message

 

End Sub

 

Sub Fail(message)

Wscript.Echo message

Wscript.Quit 2

End Sub

 

Esperamos que este script os pueda servir de ayuda.

Saludos.

Ramón de Diego Perdiz.