65 lines
2.3 KiB
Plaintext
65 lines
2.3 KiB
Plaintext
' 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
|