' Windows Installer script viewer for use with Windows Scripting Host CScript.exe only ' For use with Windows Scripting Host, CScript.exe or WScript.exe ' Copyright (c) Microsoft Corporation. All rights reserved. ' Demonstrates the use of the special database processing mode for viewing script files ' Option Explicit Const msiOpenDatabaseModeListScript = 5 ' Check arg count, and display help if argument not present or contains ? Dim argCount:argCount = Wscript.Arguments.Count If argCount > 0 Then If InStr(1, Wscript.Arguments(0), "?", vbTextCompare) > 0 Then argCount = 0 If argCount = 0 Then Wscript.Echo "Windows Installer Script Viewer for Windows Scripting Host (CScript.exe)" &_ vbNewLine & " Argument is path to installer execution script" &_ vbNewLine &_ vbNewLine & "Copyright (C) Microsoft Corporation. All rights reserved." Wscript.Quit 1 End If ' Cannot run with GUI script host, as listing is performed to standard out If UCase(Mid(Wscript.FullName, Len(Wscript.Path) + 2, 1)) = "W" Then Wscript.Echo "Cannot use WScript.exe - must use CScript.exe with this program" Wscript.Quit 2 End If Dim installer, view, database, record, fieldCount, template, index, field On Error Resume Next Set installer = CreateObject("WindowsInstaller.Installer") : CheckError Set database = installer.Opendatabase(Wscript.Arguments(0), msiOpenDatabaseModeListScript) : CheckError Set view = database.Openview("") view.Execute : CheckError Do Set record = view.Fetch If record Is Nothing Then Exit Do fieldCount = record.FieldCount template = record.StringData(0) index = InstrRev(template, "[") + 1 If (index > 1) Then field = Int(Mid(template, index, InstrRev(template, "]") - index)) If field < fieldCount Then template = Left(template, Len(template) - 1) While field < fieldCount field = field + 1 template = template & ",[" & field & "]" Wend record.StringData(0) = template & ")" End If End If Wscript.Echo record.FormatText Loop Wscript.Quit 0 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 & vbNewLine & errRec.FormatText End If Wscript.Echo message Wscript.Quit 2 End Sub