<br><font size=2 face="sans-serif">Hello,</font>
<br>
<br><font size=2 face="sans-serif">I use following vbs script to set some environment variables, which also</font>
<br><font size=2 face="sans-serif">give me information on the system and language used on th etarget system:</font>
<br><font size=2 face="sans-serif">---------------start----------------</font>
<br><font size=2 face="sans-serif">' *** Author: T. Wittrock, RZ Uni Kiel ***</font>
<br>
<br><font size=2 face="sans-serif">Option Explicit</font>
<br>
<br><font size=2 face="sans-serif">Private Const strRegKeyIE           = "HKLM\Software\Microsoft\Internet Explorer\"</font>
<br><font size=2 face="sans-serif">Private Const strRegValVersion      = "Version"</font>
<br><font size=2 face="sans-serif">Private Const strRegKeyOfficePrefix = "HKCU\Software\Microsoft\Office\"</font>
<br><font size=2 face="sans-serif">Private Const strRegKeyOfficeSuffix = "\Common\LanguageResources\"</font>
<br><font size=2 face="sans-serif">Private Const strRegValLanguage     = "InstallLanguage"</font>
<br><font size=2 face="sans-serif">Private Const strApplicationNames   = "Word,Excel,Outlook,Powerpoint,Access,FrontPage"</font>
<br><font size=2 face="sans-serif">Private Const strBuildNumbersO2k    = "2720,2720,2711,2716,2720,2720;3821,3821,3821,3821,3821,3821;4402,4402,4527,4527,4402,4426;6926,6926,6627,6620,6926,6625"</font>
<br><font size=2 face="sans-serif">Private Const strBuildNumbersOxp    = "2627,2614,2627,2623,2627,2623;3416,3506,3513,3506,3409,3402;4219,4302,4219,4205,4302,4128;6612,6501,6626,6501,6501,6308"</font>
<br><font size=2 face="sans-serif">Private Const strBuildNumbersO2k3   = "5604,5612,5510,5529,5614,5516;6359,6355,6353,6361,6355,6356;6538,6560,6568,6564,6566,6552;8169,8169,8169,8169,8166,8164"</font>
<br><font size=2 face="sans-serif">Private Const strBuildNumbersO2k7   = "0,0,0,0,0,0"</font>
<br>
<br><font size=2 face="sans-serif">Dim wshShell, objFileSystem, objCmdFile, objWMIService, colOSes, objOS, colWPAs, objWPA, colAUServices, objService, arrayApplications</font>
<br><font size=2 face="sans-serif">Dim strTempFolder, strSystemFolder, strCmdFileName, strWUAFileName, strMSIFileName, strVBScriptFileName, strOSVersion, strFileVersion, languageCode, i</font>
<br>
<br><font size=2 face="sans-serif">Private Sub WriteLanguage2File(objTextFile, strVarName, languageCode)</font>
<br>
<br><font size=2 face="sans-serif">  Select Case languageCode</font>
<br><font size=2 face="sans-serif">    Case 9, 1033, 2057, 3081, 4105, 5129, 6153, 7177, 8201, 10249, 11273</font>
<br><font size=2 face="sans-serif">      objTextFile.WriteLine("set " & strVarName & "=enu")</font>
<br><font size=2 face="sans-serif">    Case 1036, 2060, 3084, 4108, 5132</font>
<br><font size=2 face="sans-serif">      objTextFile.WriteLine("set " & strVarName & "=fra")</font>
<br><font size=2 face="sans-serif">    Case 1034, 2058, 3082, 4106, 5130, 6154, 7178, 8202, 9226, 10250, 11274, _</font>
<br><font size=2 face="sans-serif">         12298, 13322, 14346, 15370, 16394, 17418, 18442, 19466, 20490</font>
<br><font size=2 face="sans-serif">      objTextFile.WriteLine("set " & strVarName & "=esn")</font>
<br><font size=2 face="sans-serif">    Case 1049, 2073</font>
<br><font size=2 face="sans-serif">      objTextFile.WriteLine("set " & strVarName & "=rus")</font>
<br><font size=2 face="sans-serif">    Case 2070</font>
<br><font size=2 face="sans-serif">      objTextFile.WriteLine("set " & strVarName & "=ptg")</font>
<br><font size=2 face="sans-serif">    Case 1046</font>
<br><font size=2 face="sans-serif">      objTextFile.WriteLine("set " & strVarName & "=ptb")</font>
<br><font size=2 face="sans-serif">    Case 1031, 2055, 3079, 4103, 5127</font>
<br><font size=2 face="sans-serif">      objTextFile.WriteLine("set " & strVarName & "=deu")</font>
<br><font size=2 face="sans-serif">    Case 1043, 2067</font>
<br><font size=2 face="sans-serif">      objTextFile.WriteLine("set " & strVarName & "=nld")</font>
<br><font size=2 face="sans-serif">    Case 1040, 2064</font>
<br><font size=2 face="sans-serif">      objTextFile.WriteLine("set " & strVarName & "=ita")</font>
<br><font size=2 face="sans-serif">    Case 1045</font>
<br><font size=2 face="sans-serif">      objTextFile.WriteLine("set " & strVarName & "=plk")</font>
<br><font size=2 face="sans-serif">    Case 1038</font>
<br><font size=2 face="sans-serif">      objTextFile.WriteLine("set " & strVarName & "=hun")</font>
<br><font size=2 face="sans-serif">    Case 1029</font>
<br><font size=2 face="sans-serif">      objTextFile.WriteLine("set " & strVarName & "=csy")</font>
<br><font size=2 face="sans-serif">    Case 1053, 2077</font>
<br><font size=2 face="sans-serif">      objTextFile.WriteLine("set " & strVarName & "=sve")</font>
<br><font size=2 face="sans-serif">    Case 1055</font>
<br><font size=2 face="sans-serif">      objTextFile.WriteLine("set " & strVarName & "=trk")</font>
<br><font size=2 face="sans-serif">    Case 1032</font>
<br><font size=2 face="sans-serif">      objTextFile.WriteLine("set " & strVarName & "=ell")</font>
<br><font size=2 face="sans-serif">    Case 1030</font>
<br><font size=2 face="sans-serif">      objTextFile.WriteLine("set " & strVarName & "=dan")</font>
<br><font size=2 face="sans-serif">    Case 1044, 2068</font>
<br><font size=2 face="sans-serif">      objTextFile.WriteLine("set " & strVarName & "=nor")</font>
<br><font size=2 face="sans-serif">    Case 1035</font>
<br><font size=2 face="sans-serif">      objTextFile.WriteLine("set " & strVarName & "=fin")</font>
<br><font size=2 face="sans-serif">  End Select</font>
<br><font size=2 face="sans-serif">End Sub</font>
<br>
<br><font size=2 face="sans-serif">Private Sub WriteVersion2File(objTextFile, strPrefix, strVersion)</font>
<br><font size=2 face="sans-serif">Dim arrayVersion, i</font>
<br>
<br><font size=2 face="sans-serif">  If Len(strVersion) > 0 Then</font>
<br><font size=2 face="sans-serif">    arrayVersion = split(strVersion, ".")</font>
<br><font size=2 face="sans-serif">    For i = 0 To UBound(arrayVersion)</font>
<br><font size=2 face="sans-serif">      Select Case i</font>
<br><font size=2 face="sans-serif">        Case 0</font>
<br><font size=2 face="sans-serif">          objTextFile.WriteLine("set " & strPrefix & "_MAJOR=" & arrayVersion(i))         </font>
<br><font size=2 face="sans-serif">        Case 1</font>
<br><font size=2 face="sans-serif">          objTextFile.WriteLine("set " & strPrefix & "_MINOR=" & arrayVersion(i))         </font>
<br><font size=2 face="sans-serif">        Case 2</font>
<br><font size=2 face="sans-serif">          objTextFile.WriteLine("set " & strPrefix & "_BUILD=" & arrayVersion(i))         </font>
<br><font size=2 face="sans-serif">        Case 3</font>
<br><font size=2 face="sans-serif">          objTextFile.WriteLine("set " & strPrefix & "_REVISION=" & arrayVersion(i))         </font>
<br><font size=2 face="sans-serif">      End Select</font>
<br><font size=2 face="sans-serif">    Next</font>
<br><font size=2 face="sans-serif">  Else</font>
<br><font size=2 face="sans-serif">    objTextFile.WriteLine("set " & strPrefix & "_MAJOR=0")         </font>
<br><font size=2 face="sans-serif">  End If</font>
<br><font size=2 face="sans-serif">End Sub</font>
<br>
<br><font size=2 face="sans-serif">Private Function ApplicationVersion(strApplicationName)</font>
<br><font size=2 face="sans-serif">Dim objApplication, arrayBuild</font>
<br>
<br><font size=2 face="sans-serif">  On Error Resume Next  'Turn error reporting off</font>
<br><font size=2 face="sans-serif">  ApplicationVersion = ""</font>
<br><font size=2 face="sans-serif">  ' Try existing application instance</font>
<br><font size=2 face="sans-serif">  Set objApplication = GetObject(, strApplicationName & ".Application")</font>
<br><font size=2 face="sans-serif">  If Err <> 0 Then</font>
<br><font size=2 face="sans-serif">    ' If GetObject fails, use CreateObject instead</font>
<br><font size=2 face="sans-serif">    Set objApplication = CreateObject(strApplicationName & ".Application")</font>
<br><font size=2 face="sans-serif">  End If</font>
<br><font size=2 face="sans-serif">  arrayBuild = split("." & objApplication.Build, ".")</font>
<br><font size=2 face="sans-serif">  ApplicationVersion = objApplication.Version & "." & arrayBuild(UBound(arrayBuild))</font>
<br><font size=2 face="sans-serif">  objApplication.Quit</font>
<br><font size=2 face="sans-serif">  Set objApplication = Nothing  ' Clear object memory</font>
<br><font size=2 face="sans-serif">  On Error GoTo 0 'Turn error reporting on</font>
<br><font size=2 face="sans-serif">End Function</font>
<br>
<br><font size=2 face="sans-serif">Private Function OfficeSPVersion(appVersion, appIndex)</font>
<br><font size=2 face="sans-serif">Dim arrayVersion, arraySPs, arrayBuilds, i, result</font>
<br>
<br><font size=2 face="sans-serif">  result = 0</font>
<br><font size=2 face="sans-serif">  arrayVersion = split(appVersion, ".")</font>
<br><font size=2 face="sans-serif">  Select Case CInt(arrayVersion(0))</font>
<br><font size=2 face="sans-serif">    Case 9</font>
<br><font size=2 face="sans-serif">      arraySPs = split(strBuildNumbersO2k, ";")</font>
<br><font size=2 face="sans-serif">    Case 10</font>
<br><font size=2 face="sans-serif">      arraySPs = split(strBuildNumbersOxp, ";")</font>
<br><font size=2 face="sans-serif">    Case 11</font>
<br><font size=2 face="sans-serif">      arraySPs = split(strBuildNumbersO2k3, ";")</font>
<br><font size=2 face="sans-serif">    Case 12</font>
<br><font size=2 face="sans-serif">      arraySPs = split(strBuildNumbersO2k7, ";")</font>
<br><font size=2 face="sans-serif">    Case Else</font>
<br><font size=2 face="sans-serif">      arraySPs = split("0,0,0,0,0,0", ";")</font>
<br><font size=2 face="sans-serif">  End Select</font>
<br><font size=2 face="sans-serif">  For i = 0 To UBound(arraySPs)</font>
<br><font size=2 face="sans-serif">    arrayBuilds = split(arraySPs(i), ",")</font>
<br><font size=2 face="sans-serif">    If CInt(arrayVersion(UBound(arrayVersion))) >= CInt(arrayBuilds(appIndex)) Then</font>
<br><font size=2 face="sans-serif">      result = i</font>
<br><font size=2 face="sans-serif">    End If</font>
<br><font size=2 face="sans-serif">  Next</font>
<br><font size=2 face="sans-serif">  OfficeSPVersion = result</font>
<br><font size=2 face="sans-serif">End Function</font>
<br>
<br><font size=2 face="sans-serif">Private Function OfficeLanguageCode(appVersion)</font>
<br><font size=2 face="sans-serif">Dim arrayVersion, strRegKey</font>
<br>
<br><font size=2 face="sans-serif">  On Error Resume Next  'Turn error reporting off</font>
<br><font size=2 face="sans-serif">  OfficeLanguageCode = 0</font>
<br><font size=2 face="sans-serif">  arrayVersion = split(appVersion, ".")</font>
<br><font size=2 face="sans-serif">  strRegKey = strRegKeyOfficePrefix & arrayVersion(0) & "." & arrayVersion(1) & strRegKeyOfficeSuffix </font>
<br><font size=2 face="sans-serif">  OfficeLanguageCode = CInt(wshShell.RegRead(strRegKey & strRegValLanguage))</font>
<br><font size=2 face="sans-serif">  On Error GoTo 0 'Turn error reporting on</font>
<br><font size=2 face="sans-serif">End Function</font>
<br>
<br>
<br><font size=2 face="sans-serif">Set wshShell = WScript.CreateObject("WScript.Shell")</font>
<br><font size=2 face="sans-serif">arrayApplications = split(strApplicationNames, ",")</font>
<br><font size=2 face="sans-serif">strTempFolder = wshShell.ExpandEnvironmentStrings("%TEMP%")</font>
<br><font size=2 face="sans-serif">strSystemFolder = wshShell.ExpandEnvironmentStrings("%SystemRoot%") & "\system32"</font>
<br><font size=2 face="sans-serif">strCmdFileName = strTempFolder & "\SetSystemEnvVars.cmd"</font>
<br><font size=2 face="sans-serif">strWUAFileName = strSystemFolder & "\wuaueng.dll"</font>
<br><font size=2 face="sans-serif">strMSIFileName = strSystemFolder & "\msi.dll"</font>
<br><font size=2 face="sans-serif">strVBScriptFileName = strSystemFolder & "\vbscript.dll"</font>
<br>
<br><font size=2 face="sans-serif">Set objFileSystem = CreateObject("Scripting.FileSystemObject")</font>
<br><font size=2 face="sans-serif">Set objCmdFile = objFileSystem.CreateTextFile(strCmdFileName, True)</font>
<br>
<br><font size=2 face="sans-serif">' Determine Windows system properties</font>
<br><font size=2 face="sans-serif">Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")</font>
<br><font size=2 face="sans-serif">Set colOSes = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")</font>
<br><font size=2 face="sans-serif">For Each objOS in colOSes</font>
<br><font size=2 face="sans-serif">  strOSVersion = Left(objOS.Version, 3)</font>
<br><font size=2 face="sans-serif">  objCmdFile.WriteLine("set OS_VERSION=" & strOSVersion)</font>
<br><font size=2 face="sans-serif">  objCmdFile.WriteLine("set OS_SP_VERSION=" & objOS.ServicePackMajorVersion)</font>
<br><font size=2 face="sans-serif">  WriteLanguage2File objCmdFile, "OS_LANGUAGE", objOS.OSLanguage</font>
<br><font size=2 face="sans-serif">  objCmdFile.WriteLine("set SystemDirectory=" & objOS.SystemDirectory)</font>
<br><font size=2 face="sans-serif">Next</font>
<br><font size=2 face="sans-serif">Set colOSes = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")</font>
<br><font size=2 face="sans-serif">For Each objOS in colOSes</font>
<br><font size=2 face="sans-serif">  objCmdFile.WriteLine("set OS_ARCHITECTURE=" & LCase(Left(objOS.SystemType, 3)))</font>
<br><font size=2 face="sans-serif">  objCmdFile.WriteLine("set DOMAIN_ROLE=" & objOS.DomainRole)</font>
<br><font size=2 face="sans-serif">Next</font>
<br>
<br><font size=2 face="sans-serif">' Determine Windows update agent version</font>
<br><font size=2 face="sans-serif">strFileVersion = objFileSystem.GetFileVersion(strWUAFileName)</font>
<br><font size=2 face="sans-serif">WriteVersion2File objCmdFile, "WUA_VERSION", strFileVersion</font>
<br>
<br><font size=2 face="sans-serif">' Determine Windows installer version</font>
<br><font size=2 face="sans-serif">strFileVersion = objFileSystem.GetFileVersion(strMSIFileName)</font>
<br><font size=2 face="sans-serif">WriteVersion2File objCmdFile, "MSI_VERSION", strFileVersion</font>
<br>
<br><font size=2 face="sans-serif">' Determine Windows script host version</font>
<br><font size=2 face="sans-serif">strFileVersion = objFileSystem.GetFileVersion(strVBScriptFileName)</font>
<br><font size=2 face="sans-serif">WriteVersion2File objCmdFile, "SCRIPT_VERSION", strFileVersion</font>
<br>
<br><font size=2 face="sans-serif">' Determine Internet Explorer version</font>
<br><font size=2 face="sans-serif">strFileVersion = wshShell.RegRead(strRegKeyIE & strRegValVersion)</font>
<br><font size=2 face="sans-serif">WriteVersion2File objCmdFile, "IE_VERSION", strFileVersion</font>
<br>
<br><font size=2 face="sans-serif">' Determine Office version</font>
<br><font size=2 face="sans-serif">For i = 0 To UBound(arrayApplications)</font>
<br><font size=2 face="sans-serif">  strFileVersion = ApplicationVersion(arrayApplications(i))</font>
<br><font size=2 face="sans-serif">  If strFileVersion <> "" Then</font>
<br><font size=2 face="sans-serif">    objCmdFile.WriteLine("set OFFICE_VERSION_APP=" & arrayApplications(i))</font>
<br><font size=2 face="sans-serif">    WriteVersion2File objCmdFile, "OFFICE_VERSION", strFileVersion</font>
<br><font size=2 face="sans-serif">    objCmdFile.WriteLine("set OFFICE_SP_VERSION=" & OfficeSPVersion(strFileVersion, i))</font>
<br><font size=2 face="sans-serif">    languageCode = OfficeLanguageCode(strFileVersion)</font>
<br><font size=2 face="sans-serif">    If languageCode = 0 Then</font>
<br><font size=2 face="sans-serif">      objCmdFile.WriteLine("set OFFICE_LANGUAGE=%OS_LANGUAGE%")</font>
<br><font size=2 face="sans-serif">    Else</font>
<br><font size=2 face="sans-serif">      WriteLanguage2File objCmdFile, "OFFICE_LANGUAGE", languageCode</font>
<br><font size=2 face="sans-serif">    End If</font>
<br><font size=2 face="sans-serif">    Exit For</font>
<br><font size=2 face="sans-serif">  End If</font>
<br><font size=2 face="sans-serif">Next</font>
<br>
<br><font size=2 face="sans-serif">'</font>
<br><font size=2 face="sans-serif">' Perform the following WMI queries last, since they might fail if WMI is damaged </font>
<br><font size=2 face="sans-serif">'</font>
<br>
<br><font size=2 face="sans-serif">' Determine Windows activation state - not available on Windows 2000 and Vista systems </font>
<br><font size=2 face="sans-serif">If (strOSVersion = "5.1") Or (strOSVersion = "5.2") Then</font>
<br><font size=2 face="sans-serif">  Set colWPAs = objWMIService.ExecQuery("Select * from Win32_WindowsProductActivation")</font>
<br><font size=2 face="sans-serif">  For Each objWPA in colWPAs</font>
<br><font size=2 face="sans-serif">    objCmdFile.WriteLine("set OS_ACTIVATION_REQUIRED=" & objWPA.ActivationRequired)</font>
<br><font size=2 face="sans-serif">  Next</font>
<br><font size=2 face="sans-serif">End If</font>
<br>
<br><font size=2 face="sans-serif">' Determine state of automatic updates service - not available on Windows Vista systems </font>
<br><font size=2 face="sans-serif">If (strOSVersion <> "6.0") Then</font>
<br><font size=2 face="sans-serif">  Set colAUServices = objWMIService.ExecQuery("Select * from Win32_Service Where Name = 'wuauserv'")</font>
<br><font size=2 face="sans-serif">  For Each objService in colAUServices</font>
<br><font size=2 face="sans-serif">    objCmdFile.WriteLine("set AU_SERVICE_STATE=" & objService.State)</font>
<br><font size=2 face="sans-serif">  Next</font>
<br><font size=2 face="sans-serif">End If</font>
<br>
<br><font size=2 face="sans-serif">objCmdFile.Close()</font>
<br><font size=2 face="sans-serif">WScript.Quit</font>
<br><font size=2 face="sans-serif">----------end---------</font>
<br>
<br><font size=2 face="sans-serif">Johannes</font>
<br>
<br><font size=2 face="sans-serif"><br>
</font>
<br>
<br>
<br>
<table width=100%>
<tr valign=top>
<td>
<td><font size=1 face="sans-serif"><b>wpkg-users-request@lists.wpkg.org</b></font>
<br><font size=1 face="sans-serif">Sent by: wpkg-users-bounces@lists.wpkg.org</font>
<p><font size=1 face="sans-serif">22.01.2009 12:00</font>
<br><font size=1 face="sans-serif">Please respond to wpkg-users</font>
<br>
<td><font size=1 face="Arial">        </font>
<br><font size=1 face="sans-serif">        To:        wpkg-users@lists.wpkg.org</font>
<br><font size=1 face="sans-serif">        cc:        </font>
<br><font size=1 face="sans-serif">        Subject:        wpkg-users Digest, Vol 15, Issue 14</font></table>
<br>
<br>
<br><font size=2><tt>Send wpkg-users mailing list submissions to<br>
wpkg-users@lists.wpkg.org</tt></font>
<br>
<br><font size=2><tt>To subscribe or unsubscribe via the World Wide Web, visit<br>
http://lists.wpkg.org/mailman/listinfo/wpkg-users</tt></font>
<br><font size=2><tt>or, via email, send a message with subject or body 'help' to<br>
wpkg-users-request@lists.wpkg.org</tt></font>
<br>
<br><font size=2><tt>You can reach the person managing the list at<br>
wpkg-users-owner@lists.wpkg.org</tt></font>
<br>
<br><font size=2><tt>When replying, please edit your Subject line so it is more specific<br>
than "Re: Contents of wpkg-users digest..."<br>
</tt></font>
<br>
<br><font size=2><tt>Today's Topics:<br>
</tt></font>
<br><font size=2><tt>1. WPKG with multiple systems and architectures (Daniel Dehennin)<br>
</tt></font>
<br>
<br><font size=2><tt>----------------------------------------------------------------------<br>
</tt></font>
<br><font size=2><tt>Message: 1<br>
Date: Thu, 22 Jan 2009 10:47:55 +0100<br>
From: Daniel Dehennin <daniel.dehennin@ac-caen.fr><br>
Subject: [wpkg-users] WPKG with multiple systems and architectures<br>
To: wpkg-users@lists.wpkg.org<br>
Message-ID: <87r62v1xkk.fsf@skoll.in.ac-caen.fr><br>
Content-Type: text/plain; charset=us-ascii<br>
</tt></font>
<br><font size=2><tt>Hello,<br>
</tt></font>
<br><font size=2><tt>Is there any best practices to setup WPKG for multiple systems and<br>
architectures: WinXP32, WinXP64, WinVista32, WinVista64... ?<br>
</tt></font>
<br><font size=2><tt>My idea is to minimise the number of package definition using<br>
variables and a good software repository layout, something like:<br>
</tt></font>
<br><font size=2><tt>\\server\wpkg$\software\<OS>\<ARCH>\<applis><br>
or<br>
\\server\wpkg$\software\<applis>\<OS>\<ARCH><br>
</tt></font>
<br><font size=2><tt>Any hints ?<br>
</tt></font>
<br><font size=2><tt>Regards.<br>
--<br>
Daniel Dehennin<br>
RAIP de l'Orne<br>
</tt></font>
<br>
<br><font size=2><tt>------------------------------<br>
</tt></font>
<br><font size=2><tt>_______________________________________________<br>
wpkg-users mailing list<br>
wpkg-users@lists.wpkg.org<br>
http://lists.wpkg.org/mailman/listinfo/wpkg-users<br>
</tt></font>
<br>
<br><font size=2><tt>End of wpkg-users Digest, Vol 15, Issue 14<br>
******************************************</tt></font>
<br>
<br>