[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[vidalia-svn] r3600: Add script to automate creation of localization tranforms in (vidalia/trunk/pkg/win32)



Author: coderman
Date: 2009-03-06 07:03:34 -0500 (Fri, 06 Mar 2009)
New Revision: 3600

Added:
   vidalia/trunk/pkg/win32/mktransform.vbs
Log:
Add script to automate creation of localization tranforms in MSI packages.

Added: vidalia/trunk/pkg/win32/mktransform.vbs
===================================================================
--- vidalia/trunk/pkg/win32/mktransform.vbs	                        (rev 0)
+++ vidalia/trunk/pkg/win32/mktransform.vbs	2009-03-06 12:03:34 UTC (rev 3600)
@@ -0,0 +1,67 @@
+' Copyright (C) 2008-2009  The Tor Project, Inc.
+' See LICENSE file for rights and terms.
+'
+' This script automates the task of creating transforms from one MSI database
+' to another. This is required for language based transforms, for example.
+'
+' To apply vidalia_fr.msi localization to vidalia.msi with name 'fr':
+'   cscript.exe mktransform.vbs fr vidalia.msi vidalia_fr.msi
+'
+Const msiOpenDatabaseModeReadOnly = 0
+Const msiOpenDatabaseModeTransact = 1
+Const msiViewModifyAssign = 3
+Const msiTransformErrorNone = 0
+Const msiTransformValidationNone = 0
+
+Dim message
+If Wscript.Arguments.Count < 3 Then
+  message = "Usage: mktransform <transform name> <minimal msi> <target msi>"
+  Wscript.Echo message
+  Wscript.Quit 1
+End If
+
+Dim transformName
+Dim minMsiFile
+Dim currMsiFile
+transformName = Wscript.Arguments.Item(0)
+minMsiFile = Wscript.Arguments.Item(1)
+currMsiFile = Wscript.Arguments.Item(2)
+
+CreateTransform transformName, minMsiFile, currMsiFile
+Wscript.Quit 0
+
+Sub CreateTransform (TransformName, MinMsiFile, CurrMsiFile)
+  ' Create transform from minimal to current/target MSI database
+  Set installer = Wscript.CreateObject("WindowsInstaller.Installer") : CheckError
+  Dim database1 : Set database1 = installer.OpenDatabase(MinMsiFile, msiOpenDatabaseModeTransact) : CheckError
+  Dim database2 : Set database2 = installer.OpenDatabase(CurrMsiFile, msiOpenDatabaseModeReadOnly) : CheckError
+  Dim transform : transform = TransformName & ".mst"
+  database2.GenerateTransform database1, transform : CheckError
+  database2.CreateTransformSummaryInfo database1, transform, msiTransformErrorNone, msiTransformValidationNone : CheckError
+
+  ' Embed Transform into the database with the requested name
+  Set view = database1.OpenView("SELECT `Name`,`Data` FROM _Storages") : CheckError
+  view.Execute : CheckError
+  Set record = installer.CreateRecord(2)
+  record.StringData(1) = TransformName
+  record.SetStream 2, transform : CheckError
+  view.Modify msiViewModifyAssign, record : CheckError
+  database1.Commit : CheckError
+  Set database1 = Nothing
+  Set database2 = Nothing
+End Sub
+
+Sub CheckError
+  If Err = 0 Then Exit Sub
+  Dim message, errRec
+  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 & vbNewLine & errRec.FormatText
+    End If
+  End If
+  Wscript.Echo message
+  Wscript.Quit 1
+End Sub
+