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