Windows Installer API (SDK)

Environment Table

Referenz » Environment Table | Microsoft Docs


VBS class Environment


Class classEnvironmentTable
Private mEnvironment, mName, mValue, mComponent

    Public Property Get pEnvironment
        pEnvironment = mEnvironment
    End Property
    Public Property Let pEnvironment(strEnvironment)
        mEnvironment = strEnvironment
    End Property
    Public Property Get pName
        pName = mName
    End Property
    Public Property Let pName(strName)
        mName = strName
    End Property
    Public Property Get pValue
        pValue = mValue
    End Property
    Public Property Let pValue(strValue)
        mValue = strValue
    End Property
    Public Property Get pComponent
        pComponent = mComponent
    End Property
    Public Property Let pComponent(strComponent)
        mComponent = strComponent
    End Property
    
    Private Sub Class_Initialize
        'Anweisungen
    End Sub
    ' -----------------------------------------------------------------
    
    Public Function CreateTable()
    Dim strSQL, objView, objTableRow

    strSQL = "CREATE TABLE " & Chr(96) & "Environment" & Chr(96) & " (" & _
              Chr(96) & "Environment" & Chr(96) & " CHAR(72) NOT NULL, " & _
              Chr(96) & "Name" & Chr(96) & " CHAR(255) NOT NULL LOCALIZABLE, " & _
              Chr(96) & "Value" & Chr(96) & " CHAR(255) LOCALIZABLE, " & _
              Chr(96) & "Component_" & Chr(96) & " CHAR(72) NOT NULL PRIMARY KEY " & _
              Chr(96) & "Environment" & Chr(96) & ")"

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

    msiValidation.pTable = "Environment"
    msiValidation.pColumn = "Environment"
    msiValidation.pNullable = "N"
    msiValidation.pMinValue = Null
    msiValidation.pMaxValue = Null
    msiValidation.pKeyTable = ""
    msiValidation.pKeyColumn = Null
    msiValidation.pCategory = "Identifier"
    msiValidation.pSet = ""
    msiValidation.pDescription = "Unique identifier for the environmental variable " & _
                "setting."

        msiValidation.ModifyValidationRecord
        msiValidation.ResetValidationRecord

    msiValidation.pTable = "Environment"
    msiValidation.pColumn = "Name"
    msiValidation.pNullable = "N"
    msiValidation.pMinValue = Null
    msiValidation.pMaxValue = Null
    msiValidation.pKeyTable = ""
    msiValidation.pKeyColumn = Null
    msiValidation.pCategory = "Text"
    msiValidation.pSet = ""
    msiValidation.pDescription = "The name of the environmental value."

        msiValidation.ModifyValidationRecord
        msiValidation.ResetValidationRecord

    msiValidation.pTable = "Environment"
    msiValidation.pColumn = "Value"
    msiValidation.pNullable = "Y"
    msiValidation.pMinValue = Null
    msiValidation.pMaxValue = Null
    msiValidation.pKeyTable = ""
    msiValidation.pKeyColumn = Null
    msiValidation.pCategory = "Text"
    msiValidation.pSet = ""
    msiValidation.pDescription = "The value to set in the environmental settings."

        msiValidation.ModifyValidationRecord
        msiValidation.ResetValidationRecord

    msiValidation.pTable = "Environment"
    msiValidation.pColumn = "Component_"
    msiValidation.pNullable = "N"
    msiValidation.pMinValue = Null
    msiValidation.pMaxValue = Null
    msiValidation.pKeyTable = "Component"
    msiValidation.pKeyColumn = cInt("1")
    msiValidation.pCategory = "Identifier"
    msiValidation.pSet = ""
    msiValidation.pDescription = "Foreign key into the Component table referencing " & _
            "component that controls the installing of the environmental value."

        msiValidation.ModifyValidationRecord
        msiValidation.ResetValidationRecord

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

    Public Function ModifyEnvironmentRecord()
    Dim strSQL, objView, objTableRow

    strSQL = "SELECT * FROM Environment"

    Set objView = objDatabase.OpenView(strSQL)
    objView.Execute
    Do 
        Set objTableRow = objView.Fetch
        If objTableRow Is Nothing Then
            Set objTableRow = objInstaller.CreateRecord(4)
            objTableRow.StringData(1) = mEnvironment
            objTableRow.StringData(2) = mName
            objTableRow.StringData(3) = mValue
            objTableRow.StringData(4) = mComponent
            objView.Modify msiViewModifyAssign, objTableRow
            Exit Do
        End If
            objTableRow.StringData(1) = mEnvironment
            objTableRow.StringData(2) = mName
            objTableRow.StringData(3) = mValue
            objTableRow.StringData(4) = mComponent
            objView.Modify msiViewModifyAssign, objTableRow
    Loop
    objDatabase.Commit()
    objView.Close
    Set objView = Nothing

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

    Public Function ExcludeDuplicateEnvironmentKeys(strEnvironmentName)
    Dim objView, objRecord, strSQL
    Dim intPOS, intCount, strTemp

    intCount = ""
    strTemp = ""
    strSQL = "SELECT Environment.Environment FROM Environment"

    Set objView = objDatabase.OpenView(strSQL)
    objView.Execute
    Do
        Set objRecord = objView.Fetch
        If objRecord Is Nothing Then Exit Do

        If Instr(1, objRecord.StringData(1), strEnvironmentName & "_", vbTextCompare) Then
            intPOS = InStrRev(objRecord.StringData(1), "_", -1, 1)
            intCount = Mid(objRecord.StringData(1), intPOS + 1)
            If IsNumeric(intCount) AND intCount <> "" Then
                strTemp = strEnvironmentName & "_" & CStr(CInt(intCount) + 1)
            End If
        ElseIf objRecord.StringData(1) = strEnvironmentName Then
            If Right(objRecord.StringData(1), 2) <> "_1" Then
                strTemp = strEnvironmentName & "_1"
            End If
        End If
    Loop
    If strTemp <> "" Then
        mEnvironment = strTemp
    Else
        mEnvironment = strEnvironmentName
    End If

    If IsObject(objRecord) Then Set objRecord = Nothing
    Set objView = Nothing

    End Function
    ' -----------------------------------------------------------------
    
    Public Function ExecuteRequest(strKey, strValue)
    
    If IsMissingTable("Environment") Then CreateTable
    
    mEnvironment = "env" & strKey
        ExcludeDuplicateEnvironmentKeys mEnvironment
        
    If strKey = "Path" Then
        mName = "*=-Path"
        mValue = "[~];" & strValue
    Else
        mName = "*=-" & strKey
        mValue = strValue
    End If
    mComponent = "Environment"
        ModifyEnvironmentRecord
    
    If msiComponent.ThereAreDuplicateComponentRecords <> mComponent Then
        msiComponent.pComponent = mComponent
        msiComponent.pComponentId = GenerateGUID
        msiComponent.pDirectory = "TARGETDIR"
        msiComponent.pAttributes = msiComponent.SetAttributesOfComponent
        msiComponent.pCondition = ""
        msiComponent.pKeyPath = ""
        
        ' write in Component table
            msiComponent.ModifyComponentRecord
        msiFeatureComponents.pFeature = "Complete"
        msiFeatureComponents.pComponent = mComponent
        
        ' write in FeatureComponent table
            msiFeatureComponents.ModifyFeatureComponentsRecord
    End If
    
    End Function
    ' -----------------------------------------------------------------

    Public Function DeleteEnvironmentRecord()
    Dim strSQL, objView, objTableRow

    strSQL = "SELECT * FROM Environment"

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

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

    Public Function DeleteAllRecords()
    Dim strSQL, objView

    strSQL = "DELETE FROM Environment"

    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 Environment"

    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
' ---------------------------------------------------------------------