76 lines
2.5 KiB
Plaintext
76 lines
2.5 KiB
Plaintext
|
' Wise for Windows Installer utility to change the SourcePath field in the WiseSourcePath table in an installer database
|
||
|
' For use with Windows Scripting Host, CScript.exe or WScript.exe
|
||
|
' Copyright (c) 1999, Microsoft Corporation
|
||
|
' Demonstrates the script-driven database queries and updates
|
||
|
'
|
||
|
Option Explicit
|
||
|
|
||
|
Const msiOpenDatabaseModeReadOnly = 0
|
||
|
Const msiOpenDatabaseModeTransact = 1
|
||
|
Const msiViewModifyUpdate = 2
|
||
|
|
||
|
Dim argNum, argCount:argCount = Wscript.Arguments.Count
|
||
|
If (argCount < 3) Then
|
||
|
Wscript.Echo "Wise for Windows Installer utility to change the SourcePath field in an installer database." &_
|
||
|
vbLf & " The 1st argument specifies the path to the MSI database, relative or full path" &_
|
||
|
vbLf & " The 2nd argument specifies the original SourcePath" &_
|
||
|
vbLf & " The 3rd argument specifies the new SourcePath"
|
||
|
Wscript.Quit 1
|
||
|
End If
|
||
|
|
||
|
'Dim openMode : openMode = msiOpenDatabaseModeReadOnly
|
||
|
Dim openMode : openMode = msiOpenDatabaseModeTransact
|
||
|
|
||
|
' Connect to Windows installer object
|
||
|
On Error Resume Next
|
||
|
Dim installer : Set installer = Nothing
|
||
|
Set installer = Wscript.CreateObject("WindowsInstaller.Installer") : CheckError
|
||
|
|
||
|
' Open database
|
||
|
Dim databasePath:databasePath = Wscript.Arguments(0)
|
||
|
Dim database : Set database = installer.OpenDatabase(databasePath, openMode) : CheckError
|
||
|
|
||
|
Dim sOldSourcePath:sOldSourcePath = Wscript.Arguments(1)
|
||
|
Dim sNewSourcePath:sNewSourcePath = Wscript.Arguments(2)
|
||
|
|
||
|
' Process SQL statements
|
||
|
Dim query, view, record, sSourcePath, sModifiedPath
|
||
|
query = "SELECT SourcePath FROM WiseSourcePath"
|
||
|
Set view = database.OpenView(query) : CheckError
|
||
|
view.Execute : CheckError
|
||
|
Do
|
||
|
Set record = view.Fetch
|
||
|
If record Is Nothing Then Exit Do
|
||
|
sSourcePath = Empty
|
||
|
sModifiedPath = Empty
|
||
|
sSourcePath = record.StringData(1)
|
||
|
If InStr(UCase(sSourcePath), UCase(sOldSourcePath)) Then
|
||
|
sModifiedPath = Replace(sSourcePath, sOldSourcePath, sNewSourcePath, 1, 1, 1)
|
||
|
If openMode = msiOpenDatabaseModeTransact Then
|
||
|
record.StringData(1) = sModifiedPath
|
||
|
view.Modify msiViewModifyUpdate, record
|
||
|
End If
|
||
|
Wscript.Echo "Old: " & sSourcePath
|
||
|
Wscript.Echo "New: " & sModifiedPath & vbLf
|
||
|
End If
|
||
|
Loop
|
||
|
view.Close
|
||
|
If openMode = msiOpenDatabaseModeTransact Then database.Commit
|
||
|
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 & vbLf & errRec.FormatText
|
||
|
End If
|
||
|
Fail message
|
||
|
End Sub
|
||
|
|
||
|
Sub Fail(message)
|
||
|
Wscript.Echo message
|
||
|
Wscript.Quit 2
|
||
|
End Sub
|