Steven Westwell’s blog

My outlook on a few things of interest to me, and hopefully you.

Posts Tagged ‘OSD’

OCS Localisation (ii)

Posted by Steven Westwell on February 26, 2008

So in my previous post, and over at Modality Systems we began looking at the localisation of Office Communicator 2007 to match the Office 2007 installation.  Over the last week I have updated the script to match the language of the OS.

However, this script is reliant on a task during the build of the client placing a variable into the registry.

Since we are using BDD (forerunner to MDT) and SMS OSD to deploy our client, we have several custom tasks and environment variables available to us during the build.  One of these is the “UILanguage” environment variable which contains the language pack to be installed during the build.  In the scenario we have this variable is populated by the BDD database depending on the role assigned to the particular client being built.

The following line of code writes the registry key that we query, this is run in the context of ztiutility.vbs, as a custom task created in BDD.: 

oShell.RegWrite "HKEY_LOCAL_MACHINESOFTWAREClientIdentificationVistaLanguage", oEnvironment.Item("UILanguage"), "Reg_SZ"

During the install applications phase of the build, following the install of both Office Communicator 2007 and the Office Communicator MUI pack, we execute the below code to localise Office Communicator

Dim iRetVal

On Error Resume Next
iRetVal = OCSLoc
On Error Goto 0

Function OCSLoc()Dim iRetVal
Dim UICode
Dim UILang
Dim strComputer
Dim oReg
Dim arrValueNames
Dim arrValueTypes
Dim strKeyPath
Dim i
Dim oShell
Dim FsoObj1

Const HKEY_LOCAL_MACHINE = &H80000001
Const REG_SZ = 1
Const REG_BINARY = 3
Const REG_DWORD = 4
Const REG_MULTI_SZ = 7
Const Success = 0
Const Failure = 1

Set FsoObj1 = CreateObject("scripting.filesystemobject")
set File_out=FsoObj1.CreateTextFile("c:logginglocationOCSLocalisation.log")

set oShell = CreateObject("wscript.Shell")

'//set default/flag values
iRetVal = Failure
OfficeCode = 1033

'// Check for the UI language and apply to OCS

File_out.writeline("zAZCFG-OCSLanguage: Looking for UI language ID in registry")

'//This script is executed following deployment from BDD/MDT via SMS OSD
'//During the deployment we tattoo the registry with the "UILanguage" environment variable
'//This is in the format en-US, fr-FR etc...

UILang = oShell.RegRead("HKEY_LOCAL_MACHINESOFTWAREClientIdentificationVistaLanguage")
'//Capture error
If Err.Number <> 0 Then
File_out.writeline("zAZCFG-OCSLanguage: Office Language Key not found, defaulting to: en-US")
oShell.RegWrite "HKEY_LOCAL_MACHINESOFTWAREMicrosoftCommunicator MUIDefault Language", 1033, "REG_DWORD"
iRetVal = Success

Set FsoObj1 = Nothing

Exit Function

End if

File_out.writeline("UI Language Identified as: " & UILang)

'// Convert Language to LCID i.e. en-US -> 1033 for all supported languages

Select Case UILang
Case "en-US"
UICode = 1033
Case "nl-NL"
UICode = 1043
Case "fr-FR"
UICode = 1036
Case "de-de"
UICode = 1031
Case "it-IT"
UICode = 1040
Case "ja-JP"
UICode = 1041
Case "es-ES"
UICode = 3082
Case "ar-SA"
UICode = 1025
Case "zh-CN"
UICode = 2052
Case "zh-HK"
UICode = 3076
Case "zh-TW"
UICode = 1028
Case "cs-CZ"
UICode = 1029
Case "da-DK"
UICode = 1030
Case "fi-FI"
UICode = 1035
Case "el-GR"
UICode = 1032
Case "he-IL"
UICode = 1037
Case "hu-HU"
UICode = 1038
Case "ko-KR"
UICode = 1042
Case "nb-NO"
UICode = 1044
Case "pl-PL"
UICode = 1045
Case "pt-BR"
UICode = 1046
Case "pt-PT"
UICode = 2070
Case "ru-RU"
UICode = 1049
Case "sv-SE"
UICode = 1053
Case "tr-TR"
UICode = 1055
Case "bg-BG"
UICode = 1026
Case "hr-HR"
UICode = 1050
Case "et-EE"
UICode = 1061
Case "lv-LV"
UICode = 1062
Case "lt-LT"
UICode = 1063
Case "ro-RO"
UICode = 1048
Case "sr-Latn-CS"
UICode = 2074
Case "sk-SK"
UICode = 1051
Case "si-SI"
UICode = 1060
Case "th-TH"
UICode = 1054
Case "uk-UA"
UICode = 1058
Case Else
UICode = 1033
End Select

File_out.writeline("UICode set to: " & UICode)

If UICode > 999 and UICode < 10000 Then

File_out.writeline("zAZCFG-OCSLanguage: Writing language code to OCS key: " & UICode)
oShell.RegWrite "HKEY_LOCAL_MACHINESOFTWAREMicrosoftCommunicator MUIDefault Language", UICode, "REG_DWORD"
iRetVal = Success


File_out.writeline("zAZCFG-OCSLanguage: Language Key not valid, defaulting to: en-US")
oShell.RegWrite "HKEY_LOCAL_MACHINESOFTWAREMicrosoftCommunicator MUIDefault Language", 1033, "REG_DWORD"
iRetVal = Success

End If

Set FsoObj1 = Nothing

OCSLoc = iRetVal

End Function


Posted in Collaboration, vista | Tagged: , , , , , , , , , , | Leave a Comment »

Office 2007 + OSD + DFS issue

Posted by Steven Westwell on February 11, 2008


Whilst deploying office 2007 via SMS OSD, with an updates location specified in the config.xml set as a DFS path (Windows 2003 SP2), Office 2007 fails to install intermittantly. In the below situation Office 2007 has been cached in the LIS (Local Installation Source) of our Windows Vista Image / .wim. 

When deploying the image to a new machine we run c:\msocache\all users\{[insert guid later]}\setup.exe /config config.xml to install Office 2007 from the locally cached source.  This config.xml stipulates the language to install office in and the update locations to check for additional MSP files to be applied during the install.

Expected Behaviour 

Office 2007 parses remote supdatelocations listed in the config.xml then the locally cached msp files.


The Office installer picks up all supdatelocations listed in the config.xml

Config.XML Extract:

<SetupUpdates CheckForSUpdates="Yes" SUpdateLocation\\DFSStore\ParentFolder\OfficeUpdates\ />
<AddLanguage Id="de-DE" ShellTransform="Yes" />
<Logging Type="Verbose" Path="c:\minint\" Template="MSOVerboseLog-(*).txt" /> 

The Beginning of the log file showing supdatelocations parsed:

PERF: TickCount=471325 Name=OBootStrapper::Run Description=Begin function
Operating System version: 6.0.6000 . Platform ID: 2
Running on a 32-bit operating system.
Command line: setup.exe /config "c:\msocache\config.xml"
Parsing command line.
Handling command line option: /config
Config XML file specified: c:\msocache\config.xml
Parsing config.xml at: c:\msocache\config.xml
Preferred product specified in config.xml to be: PROPLUS
Parsed AddLangauge: CultureTag with value: de-de in config.xml.
Parsed AddLanguage\ShellTransform: true.
Logging type verbose specified in config.xml.
Log directory: c:\minint\ specified in config.xml
Log file template: MSOVerboseLog-(*).txt specified in config.xml
Display level basic specified in config.xml.
Show modal dialogs specified in config.xml.
Hide completion notice specified in config.xml.
Auto accept license specified in config.xml.
PIDKEY element successfully parsed in config.xml
COMPANYNAME specified in config.xml.
SUpdateLocation path specified in config.xml: \\DFSStore\ParentFolder\OfficeUpdates\
Log level changed from: Standard to: Verbose
Searching for best setup controller dll to load...
Checking for setup controller dll at [\\DFSStore\ParentFolder\OfficeUpdates\].
Checking for setup controller dll at [c:\MSOCache\All Users\{90120000-0011-0000-0000-0000000FF1CE}-C\Updates].
Checking for setup controller dll at [c:\MSOCache\All Users\{90120000-0011-0000-0000-0000000FF1CE}-C].
  Found setup controller dll at [c:\MSOCache\All Users\{90120000-0011-0000-0000-0000000FF1CE}-C\OSETUP.DLL].
  Version [12.0.4518.1014].
Verify file signature in "c:\MSOCache\All Users\{90120000-0011-0000-0000-0000000FF1CE}-C\setup.exe"
"c:\MSOCache\All Users\{90120000-0011-0000-0000-0000000FF1CE}-C\setup.exe" is verified to be a valid file
Verify file signature in "c:\MSOCache\All Users\{90120000-0011-0000-0000-0000000FF1CE}-C\OSETUP.DLL"
"c:\MSOCache\All Users\{90120000-0011-0000-0000-0000000FF1CE}-C\OSETUP.DLL" is verified to be a valid file
Using setup controller dll at [c:\MSOCache\All Users\{90120000-0011-0000-0000-0000000FF1CE}-C\OSETUP.DLL].
PERF: TickCount=489655 Name=OBootStrapper::Run Description=Calling RunSetup
Opening log file c:\minint\MSOVerboseLog-(20080128154209130).txt.

However, Later, roughly 3470 lines further into the log, we see two different types of behaviour

a) Office installation suceeds

From the following log file it looks like the DFS share has not been searched, but the local MSP files have been applied.

Searching for patches in: c:\MSOCache\All Users\PROPLUSOFFICE12PATCH-C
Discovered patch c:\MSOCache\All Users\PROPLUSOFFICE12PATCH-C\Patch00000000.msp
Patch c:\MSOCache\All Users\PROPLUSOFFICE12PATCH-C\Patch00000000.msp is applicable for the current chained install.
Discovered patch c:\MSOCache\All Users\PROPLUSOFFICE12PATCH-C\Patch00000001.msp
Discovered patch c:\MSOCache\All Users\PROPLUSOFFICE12PATCH-C\Patch00000002.msp
Patch c:\MSOCache\All Users\PROPLUSOFFICE12PATCH-C\Patch00000002.msp is applicable for the current chained install.
Discovered patch c:\MSOCache\All Users\PROPLUSOFFICE12PATCH-C\Patch00000003.msp
Discovered patch c:\MSOCache\All Users\PROPLUSOFFICE12PATCH-C\Patch00000004.msp
Discovered patch c:\MSOCache\All Users\PROPLUSOFFICE12PATCH-C\Patch00000005.msp
Discovered patch c:\MSOCache\All Users\PROPLUSOFFICE12PATCH-C\Patch00000006.msp
Discovered patch c:\MSOCache\All Users\PROPLUSOFFICE12PATCH-C\Patch00000007.msp
Discovered patch c:\MSOCache\All Users\PROPLUSOFFICE12PATCH-C\Patch00000008.msp
Discovered patch c:\MSOCache\All Users\PROPLUSOFFICE12PATCH-C\Patch00000009.msp
Patch c:\MSOCache\All Users\PROPLUSOFFICE12PATCH-C\Patch00000009.msp is applicable for the current chained install.
Discovered patch c:\MSOCache\All Users\PROPLUSOFFICE12PATCH-C\Patch0000000a.msp
Patch c:\MSOCache\All Users\PROPLUSOFFICE12PATCH-C\Patch0000000a.msp is applicable for the current chained install.

b) Office installation fails

We see that Office has attempted to read from the DFS share but errors.

Searching for patches in: \\DFSStore\ParentFolder\OfficeUpdates\
Error: file search failed ErrorCode: 5(0x5).
Error: file search failed ErrorCode: 5(0x5).
Catalyst execution finished: 01/28/2008 15:42:13.  Return code: 30015.  Exception caught: ErrorCodeOnly.
PERF: TickCount=494507 Name=RunSetup Description=End function
Setup temp foler set to [C:\Windows\TEMP\Setup00000130].


In a word, permissions, the account SMS is attempting to install Office 2007 with does not have read access to the DFS share where the MSP files are stored.  By giving the “Domain Computers” group read permissions on the share Office installs without incident every time.

Other network share types tested show that a lack of permissions on a standard share logged as per the failed logs, except that the install continues on to search additional supdatelocation’s without failing.

This may only be an issue with DFS on Windows 2003 SP2, and possibly be due to other environmental circumstances i.e. poor network connectivity and time outs.

If anyone else experiences similar issues with the Office 2007 installer accessing DFS shares I would be interested to hear about it.


Posted in vista | Tagged: , , , , , , , | Leave a Comment »