Windows Installer API (SDK)
CustomAction Table
Referenz » CustomAction Table | Microsoft Docs
The CustomAction table provides the means of integrating custom code and data into the installation. The source of the code that is executed can be a stream contained within the database, a recently installed file, or an existing executable file.
Column | Type | Key | Nullable |
---|---|---|---|
Action | Identifier | Y | N |
Type | Integer | N | N |
Source | CustomSource | N | Y |
Target | Formatted | N | Y |
ExtendedType | DoubleInteger | N | Y |
VBS class CustomAction
Class classCustomActionTable Private mAction, mType, mSource, mTarget, mExtendedType Public Property Get pAction pAction = mAction End Property Public Property Let pAction(strAction) mAction = strAction End Property Public Property Get pType pType = mType End Property Public Property Let pType(intType) mType = intType End Property Public Property Get pSource pSource = mSource End Property Public Property Let pSource(strSource) mSource = strSource End Property Public Property Get pTarget pTarget = mTarget End Property Public Property Let pTarget(strTarget) mTarget = strTarget End Property Public Property Get pExtendedType pExtendedType = mExtendedType End Property Public Property Let pExtendedType(intExtendedType) mExtendedType = intExtendedType End Property Private Sub Class_Initialize 'Anweisungen End Sub ' -----------------------------------------------------------------
Public Function ModifyCustomActionRecord() Dim strSQL, objView, objTableRow strSQL = "SELECT * FROM CustomAction" Set objView = objDatabase.OpenView(strSQL) objView.Execute Do Set objTableRow = objView.Fetch If objTableRow Is Nothing Then Set objTableRow = objInstaller.CreateRecord(5) objTableRow.StringData(1) = mAction objTableRow.IntegerData(2) = mType objTableRow.StringData(3) = mSource objTableRow.StringData(4) = mTarget If Not IsNull(mExtendedType) Then _ objTableRow.IntegerData(5) = mExtendedType objView.Modify msiViewModifyAssign, objTableRow Exit Do End If objTableRow.StringData(1) = mAction objTableRow.IntegerData(2) = mType objTableRow.StringData(3) = mSource objTableRow.StringData(4) = mTarget If Not IsNull(mExtendedType) Then _ objTableRow.IntegerData(5) = mExtendedType objView.Modify msiViewModifyAssign, objTableRow Loop objDatabase.Commit() objView.Close Set objView = Nothing End Function ' -----------------------------------------------------------------
Public Function TaskKill(TaskName) mAction = "CA_TaskKill_" & Trim(TaskName) mType = cInt("3170") mSource = "SystemFolder" mTarget = "Taskkill.exe /F /IM " & Chr(34) & TaskName & Chr(34) mExtendedType = Null ModifyCustomActionRecord msiInstallExecuteSequence.pAction = mAction msiInstallExecuteSequence.pCondition = "" msiInstallExecuteSequence.pSequence = cInt("1010") msiInstallExecuteSequence.ReorderInstallExecuteSequenceTable "AfterInstallInitialize" ' 1010 msiInstallExecuteSequence.ModifyInstallExecuteSequenceRecord End Function ' -----------------------------------------------------------------
Public Function ServiceDelete(ServiceName) mAction = "CA_ServiceDelete_" & ServiceName mType = cInt("3170") mSource = "SystemFolder" mTarget = "sc.exe delete " & Chr(34) & ServiceName & Chr(34) mExtendedType = Null ModifyCustomActionRecord msiInstallExecuteSequence.pAction = mAction msiInstallExecuteSequence.pCondition = "REMOVE~=" & Chr(34) & "ALL" & Chr(34) msiInstallExecuteSequence.pSequence = cInt("2004") msiInstallExecuteSequence.ReorderInstallExecuteSequenceTable "AfterCA_ServiceStop_" & ServiceName msiInstallExecuteSequence.ModifyInstallExecuteSequenceRecord End Function ' -----------------------------------------------------------------
Private Sub Class_Terminate() 'Anweisungen End Sub End Class ' ---------------------------------------------------------------------