home *** CD-ROM | disk | FTP | other *** search
- ' Sample script for sequencing an installation from outside MSI - test code only, hardwired paths
- ' Requires AutoApi.DLL to be self-registered (use REGSVR32 AutoApi.DLL)
- Sub SingleStep()
- Dim Engine As Object, ActionView As Object
- Dim Sequence As Integer, Action As String, Condition As String
- Dim Test As Integer, Result As Integer
- Dim ExitAction As String, ErrorAction As String, CancelAction As String
- Set MsiAuto = CreateObject("Msi.ApiAutomation")
- MsiAuto.UILevel = 5 'Full UI (no enums yet)
- MsiAuto.EnableLog "warped", "C:\temp\step.log"
- Set Engine = MsiAuto.OpenPackage("C:\msi\testdb\testdb.msi")
- ' Engine.Property("SOURCEDIR") = "C:\msi\testdb" ' needed if source location different than database
- Set Database = Engine.Database
- Set ActionView = Database.OpenView("SELECT Action,Condition,Sequence FROM InstallSequence ORDER BY Sequence")
- ActionView.Execute
- Do
- Set Record = ActionView.Fetch
- If Record Is Nothing Then Exit Do
- Sequence = Record.IntegerData(3)
- Action = Record.StringData(1)
- Condition = Record.StringData(2)
- If Sequence <= 0 Then
- Debug.Print Sequence; " Action = "; Action; " (exit dialog)"
- If (Sequence = -1) Then ExitAction = Action
- If (Sequence = -2) Then CancelActon = Action
- If (Sequence = -3) Then ErrorAction = Action
- Else
- Test = Engine.EvaluateCondition(Condition)
- Debug.Print Sequence; " Action = "; Action; " Condition:"; Test;
- If Test = iecError Then Debug.Print "Invalid Expression"; Condition
- If Test <> iecFalse Then
- Result = Engine.DoAction(Action)
- Debug.Print " Result: "; Result
- If Result <> iesSuccess And Result <> iesNoAction Then Exit Do
- Else
- Debug.Print "(not called)"
- End If
- End If
- Loop
- If Result = iesSuccess Then Engine.DoAction (ExitAction)
- If Result = iesFailure Then Engine.DoAction (ErrorAction)
- If Result = iesUserExit Then Engine.DoAction (CancelAction)
- Debug.Print "Sequence completed"
- End Sub
-