Windows Installer API (SDK)

IniLocator Table

Referenz » IniLocator Table | Microsoft Docs


VBS class IniLocator


Class classIniLocatorTable
Private mSignature, mFileName, mSection, mKey, mField, mType

    Public Property Get pSignature
        pSignature = mSignature
    End Property
    Public Property Let pSignature(strSignature)
        mSignature = strSignature
    End Property
    Public Property Get pFileName
        pFileName = mFileName
    End Property
    Public Property Let pFileName(strFileName)
        mFileName = strFileName
    End Property
    Public Property Get pSection
        pSection = mSection
    End Property
    Public Property Let pSection(strSection)
        mSection = strSection
    End Property
    Public Property Get pKey
        pKey = mKey
    End Property
    Public Property Let pKey(strKey)
        mKey = strKey
    End Property
    Public Property Get pField
        pField = mField
    End Property
    Public Property Let pField(intField)
        mField = intField
    End Property
    Public Property Get pType
        pType = mType
    End Property
    Public Property Let pType(intType)
        mType = intType
    End Property
    
    Private Sub Class_Initialize
        'Anweisungen
    End Sub
    ' -----------------------------------------------------------------
    
    Public Function CreateTable()
    Dim strSQL, objView, objTableRow

    strSQL = "CREATE TABLE " & Chr(96) & "IniLocator" & Chr(96) & " (" & _
                 Chr(96) & "Signature_" & Chr(96) & " CHAR(72) NOT NULL, " & _
                 Chr(96) & "FileName" & Chr(96) & " CHAR(255) NOT NULL, " & _
                 Chr(96) & "Section" & Chr(96) & " CHAR(96) NOT NULL, " & _
                 Chr(96) & "Key" & Chr(96) & " CHAR(128) NOT NULL, " & _
                 Chr(96) & "Field" & Chr(96) & " SHORT, " & _
                 Chr(96) & "Type" & Chr(96) & " SHORT PRIMARY KEY " & _
                 Chr(96) & "Signature_" & Chr(96) & ")"

    Set objView = objDatabase.OpenView(strSQL)
    objView.Execute
    objDatabase.Commit()
    
    msiValidation.pTable = "IniLocator"
    msiValidation.pColumn = "Signature_"
    msiValidation.pNullable = "N"
    msiValidation.pMinValue = Null
    msiValidation.pMaxValue = Null
    msiValidation.pKeyTable = ""
    msiValidation.pKeyColumn = Null
    msiValidation.pCategory = "Identifier"
    msiValidation.pSet = ""
    msiValidation.pDescription = "The table key. The Signature_ represents a " & _
            "unique file signature and is also the foreign key in the Signature table."

        msiValidation.ModifyValidationRecord
        msiValidation.ResetValidationRecord
    
    msiValidation.pTable = "IniLocator"
    msiValidation.pColumn = "FileName"
    msiValidation.pNullable = "N"
    msiValidation.pMinValue = Null
    msiValidation.pMaxValue = Null
    msiValidation.pKeyTable = ""
    msiValidation.pKeyColumn = Null
    msiValidation.pCategory = "Filename"
    msiValidation.pSet = ""
    msiValidation.pDescription = "The .INI file name."

        msiValidation.ModifyValidationRecord
        msiValidation.ResetValidationRecord
    
    msiValidation.pTable = "IniLocator"
    msiValidation.pColumn = "Section"
    msiValidation.pNullable = "N"
    msiValidation.pMinValue = Null
    msiValidation.pMaxValue = Null
    msiValidation.pKeyTable = ""
    msiValidation.pKeyColumn = Null
    msiValidation.pCategory = "Text"
    msiValidation.pSet = ""
    msiValidation.pDescription = "Section name within in file (within square brackets in INI file)."

        msiValidation.ModifyValidationRecord
        msiValidation.ResetValidationRecord
    
    msiValidation.pTable = "IniLocator"
    msiValidation.pColumn = "Key"
    msiValidation.pNullable = "N"
    msiValidation.pMinValue = Null
    msiValidation.pMaxValue = Null
    msiValidation.pKeyTable = ""
    msiValidation.pKeyColumn = Null
    msiValidation.pCategory = "Text"
    msiValidation.pSet = ""
    msiValidation.pDescription = "Key value (followed by an equals sign in INI file)."

        msiValidation.ModifyValidationRecord
        msiValidation.ResetValidationRecord
    
    msiValidation.pTable = "IniLocator"
    msiValidation.pColumn = "Field"
    msiValidation.pNullable = "Y"
    msiValidation.pMinValue = 0
    msiValidation.pMaxValue = 32767
    msiValidation.pKeyTable = ""
    msiValidation.pKeyColumn = Null
    msiValidation.pCategory = ""
    msiValidation.pSet = ""
    msiValidation.pDescription = "The field in the .INI line. If Field is null or 0 " & _
                                    "the entire line is read."

        msiValidation.ModifyValidationRecord
        msiValidation.ResetValidationRecord
    
    msiValidation.pTable = "IniLocator"
    msiValidation.pColumn = "Type"
    msiValidation.pNullable = "Y"
    msiValidation.pMinValue = 0
    msiValidation.pMaxValue = 2
    msiValidation.pKeyTable = ""
    msiValidation.pKeyColumn = Null
    msiValidation.pCategory = ""
    msiValidation.pSet = ""
    msiValidation.pDescription = "An integer value that determines if the .INI value " & _
            "read is a filename or a directory location or to be used as is w/o interpretation."

        msiValidation.ModifyValidationRecord
        msiValidation.ResetValidationRecord

    Set objView = Nothing
    
    End Function
    ' -----------------------------------------------------------------

    Public Function ModifyIniLocatorRecord()
    Dim strSQL, objView, objTableRow

    strSQL = "SELECT * FROM IniLocator"

    Set objView = objDatabase.OpenView(strSQL)
    objView.Execute
    Do 
        Set objTableRow = objView.Fetch
        If objTableRow Is Nothing Then
            Set objTableRow = objInstaller.CreateRecord(6)
            objTableRow.StringData(1) = mSignature
            objTableRow.StringData(2) = mFileName
            objTableRow.StringData(3) = mSection
            objTableRow.StringData(4) = mKey
            objTableRow.IntegerData(5) = mField
            objTableRow.IntegerData(6) = mType
            objView.Modify msiViewModifyAssign, objTableRow
            Exit Do
        End If
            objTableRow.StringData(1) = mSignature
            objTableRow.StringData(2) = mFileName
            objTableRow.StringData(3) = mSection
            objTableRow.StringData(4) = mKey
            objTableRow.IntegerData(5) = mField
            objTableRow.IntegerData(6) = mType
        objView.Modify msiViewModifyAssign, objTableRow
    Loop
    objDatabase.Commit()
    objView.Close
    Set objView = Nothing

    End Function
    ' -----------------------------------------------------------------

    Public Function ExcludeDuplicateSignature(strSignature)
    Dim objView, objRecord, strSQL
    Dim intPOS, intCount, strTemp

    intPOS = ""
    intCount = ""
    strTemp = ""
    strSQL = "SELECT IniLocator.Signature_ FROM IniLocator"

    Set objView = objDatabase.OpenView(strSQL)
    objView.Execute
    Do
        Set objRecord = objView.Fetch
        If objRecord Is Nothing Then Exit Do
    
        If objRecord.StringData(1) <> mSignature Then
            'do nothing
        Else
            If Instr(1, objRecord.StringData(1), strSignature & "_", vbTextCompare) Then
                intPOS = InStrRev(objRecord.StringData(1), "_", -1, 1)
                intCount = CInt(Mid(objRecord.StringData(1), intPOS + 1))
                If IsNumeric(intCount) AND intCount <> "" Then
                    strTemp = strSignature & "_" & CStr(CInt(intCount) + 1)
                End If
            ElseIf objRecord.StringData(1) = strSignature Then
               If Right(objRecord.StringData(1), 2) <> "_1" Then
                    strTemp = strSignature & "_1"
               End If
            End If
        End If
    Loop
    If strTemp <> "" Then
        mSignature = strTemp
    Else
        mSignature = strSignature
    End If
    objView.Close
    Set objView = Nothing

    End Function
    ' -----------------------------------------------------------------

    Public Function DeleteIniLocatorRecord()
    Dim strSQL, objView, objTableRow

    strSQL = "SELECT * FROM IniLocator"

    Set objView = objDatabase.OpenView(strSQL)
    objView.Execute
    Do 
        Set objTableRow = objView.Fetch
        If objTableRow Is Nothing Then Exit Do
        
        If objTableRow.StringData(1) = mSignature Then _
           objView.Modify msiViewModifyDelete, objTableRow
    Loop
    objDatabase.Commit()
    objView.Close
    Set objView = Nothing

    End Function
    ' -----------------------------------------------------------------

    Public Function DeleteAllRecords()
    Dim strSQL, objView

    strSQL = "DELETE FROM IniLocator"

    Set objView = objDatabase.OpenView(strSQL)
        objView.Execute
    objDatabase.Commit()
        objView.Close
    Set objView = Nothing

    End Function
    ' -----------------------------------------------------------------

    Public Function DropTable()
    Dim strSQL, objView

    strSQL = "DROP TABLE IniLocator"

    Set objView = objDatabase.OpenView(strSQL)
        objView.Execute
    objDatabase.Commit()
        objView.Close
    Set objView = Nothing

    End Function
    ' -----------------------------------------------------------------

    Private Sub Class_Terminate()
        'Anweisungen
    End Sub
End Class
' ---------------------------------------------------------------------