/// This object is associated with a standard set of action functions, /// each performing particular operations on data from one or more tables. Additional /// custom actions may be added for particular product installations. The basic engine /// function is a sequencer that fetches sequential records from a designated sequence /// table, evaluates any specified condition expression, and executes the designated /// action. Actions not recognized by the engine are deferred to the UI handler object /// for processing, usually dialog box sequences. ///
/// Note that only one Session object can be opened by a single process. ///
/// Normally there is no need to close this Database object. The same object can be /// used throughout the lifetime of the Session, and it will be closed when the Session /// is closed. ///
/// Win32 MSI API: /// MsiGetActiveDatabase ///
/// Win32 MSI API: /// MsiGetLanguage ///
/// Win32 MSI APIs: /// MsiGetProperty, /// MsiSetProperty ///
/// This method is only provided for interop purposes. A Session object
/// should normally be obtained by calling
/// Logging may be selectively enabled for the various message types.
/// See the
/// If record field 0 contains a formatting string, it is used to format the data in /// the other fields. Else if the message is an error, warning, or user message, an attempt /// is made to find a message template in the Error table for the current database using the /// error number found in field 1 of the record for message types and return values. ///
/// The
/// Note, this method never returns Cancel or Error values. Instead, appropriate /// exceptions are thrown in those cases. ///
/// Win32 MSI API: /// MsiProcessMessage ///
/// Win32 MSI API: /// MsiProcessMessage ///
/// Win32 MSI API: /// MsiProcessMessage ///
/// Win32 MSI API: /// MsiEvaluateCondition ///
/// Win32 MSI API: /// MsiEvaluateCondition ///
/// Win32 MSI API: /// MsiFormatRecord ///
/// Win32 MSI API: /// MsiFormatRecord ///
/// Win32 MSI API: /// MsiFormatRecord ///
/// Note this is not the correct method for getting ordinary session properties. For that, /// see the indexer on the Session class. ///
/// Win32 MSI API: /// MsiGetProductProperty ///
/// Win32 MSI API: /// MsiVerifyDiskSpace ///
/// Win32 MSI API: /// MsiEnumComponentCosts ///
/// Note that only the following run modes are available to read from
/// a deferred custom action:
///
///
/// Win32 MSI API: /// MsiGetMode ///
/// Win32 MSI API: /// MsiSetMode ///
/// Win32 MSI API: /// MsiGetSourcePath ///
/// Win32 MSI API: /// MsiGetTargetPath ///
/// Setting the target path of a directory changes the path specification for the directory /// in the in-memory Directory table. Also, the path specifications of all other path objects /// in the table that are either subordinate or equivalent to the changed path are updated /// to reflect the change. The properties for each affected path are also updated. ///
/// If an error occurs in this function, all updated paths and properties revert to /// their previous values. Therefore, it is safe to treat errors returned by this function /// as non-fatal. ///
/// Do not attempt to configure the target path if the components using those paths /// are already installed for the current user or for a different user. Check the /// ProductState property before setting the target path to determine if the product /// containing this component is installed. ///
/// Win32 MSI API: /// MsiSetTargetPath ///
/// The SetInstallLevel method sets the following:
///
/// If 0 or a negative number is passed in the ilnstallLevel parameter,
/// the current installation level does not change, but all features are still
/// updated based on the current installation level.
///
/// Win32 MSI API: /// MsiSetInstallLevel ///
/// The DoAction method executes the action that corresponds to the name supplied. If the /// name is not recognized by the installer as a built-in action or as a custom action in /// the CustomAction table, the name is passed to the user-interface handler object, which /// can invoke a function or a dialog box. If a null action name is supplied, the installer /// uses the upper-case value of the ACTION property as the action to perform. If no property /// value is defined, the default action is performed, defined as "INSTALL". ///
/// Actions that update the system, such as the InstallFiles and WriteRegistryValues /// actions, cannot be run by calling MsiDoAction. The exception to this rule is if DoAction /// is called from a custom action that is scheduled in the InstallExecuteSequence table /// between the InstallInitialize and InstallFinalize actions. Actions that do not update the /// system, such as AppSearch or CostInitialize, can be called. ///
/// Win32 MSI API: /// MsiDoAction ///
/// The DoAction method executes the action that corresponds to the name supplied. If the /// name is not recognized by the installer as a built-in action or as a custom action in /// the CustomAction table, the name is passed to the user-interface handler object, which /// can invoke a function or a dialog box. If a null action name is supplied, the installer /// uses the upper-case value of the ACTION property as the action to perform. If no property /// value is defined, the default action is performed, defined as "INSTALL". ///
/// Actions that update the system, such as the InstallFiles and WriteRegistryValues /// actions, cannot be run by calling MsiDoAction. The exception to this rule is if DoAction /// is called from a custom action that is scheduled in the InstallExecuteSequence table /// between the InstallInitialize and InstallFinalize actions. Actions that do not update the /// system, such as AppSearch or CostInitialize, can be called. ///
/// If the called action is a deferred, rollback, or commit custom action, then the supplied
///
/// Win32 MSI API: /// MsiDoAction ///
/// This method queries the specified table, ordering the actions by the numbers in the Sequence column. /// For each row retrieved, an action is executed, provided that any supplied condition expression does /// not evaluate to FALSE. ///
/// An action sequence containing any actions that update the system, such as the InstallFiles and /// WriteRegistryValues actions, cannot be run by calling DoActionSequence. The exception to this rule is if /// DoActionSequence is called from a custom action that is scheduled in the InstallExecuteSequence table /// between the InstallInitialize and InstallFinalize actions. Actions that do not update the system, such /// as AppSearch or CostInitialize, can be called. ///
/// Win32 MSI API: /// MsiSequence ///