Set this value for all components belonging to a feature to prevent the feature from being run-from-network or run-from-source. Note that if a feature has no components, the feature always shows run-from-source and run-from-my-computer as valid options.
Set this bit for all components belonging to a feature to prevent the feature from being run-from-my-computer. Note that if a feature has no components, the feature always shows run-from-source and run-from-my-computer as valid options.
If the Value field of the corresponding record in the Registry table is null, the Name field in that record must not contain "+", "-", or "*". For more information, see the description of the Name field in Registry table.
Setting this bit is recommended for registry entries written to the HKCU hive. This ensures the installer writes the necessary HKCU registry entries when there are multiple users on the same machine.
Use this flag only for components that are being registered by the Registry table. Do not use this flag for components registered by the AppId, Class, Extension, ProgId, MIME, and Verb tables.
If this is a 64-bit component replacing a 32-bit component, set this bit and assign a new GUID in the ComponentId column.
If this bit is set, the Windows Installer calls the RegDisableReflectionKey on each key being accessed by the component. This bit is available with Windows Installer version 4.0 and is ignored on 32-bit systems.
If a subsequent patch is installed, marked with the SupersedeEarlier flag in its MsiPatchSequence table to supersede the first patch, Windows Installer 4.5 can unregister and uninstall components marked with the UninstallOnSupersedence value. If the component is not marked with this bit, installation of a superseding patch can leave behind an unused component on the computer.
A component shared by two or more features, some of which are set to FavorLocal and some to FavorSource,
is installed locally. Components marked
A component shared by two or more features, some of which are set to FavorLocal and some to FavorSource,
is installed to run locally. Components marked
Omit this attribute and the feature state is determined according to DisallowAdvertise and FavorLocal and FavorSource.
To guarantee that the child feature's state always follows the state of its parent, even when the child and parent are initially set to absent in the SelectionTree control, you must include both FollowParent and UIDisallowAbsent in the attributes of the child feature.
Note that if you set FollowParent without setting UIDisallowAbsent, the installer cannot force the child feature out of the absent state. In this case, the child feature matches the parent's installation state only if the child is set to something other than absent.
Set FollowParent and UIDisallowAbsent to ensure a child feature follows the state of the parent feature.
If the feature is listed by the ADDDEFAULT property this bit is ignored and the feature state is determined according to FavorLocal and FavorSource.
Omit this attribute and the feature state is determined according to DisallowAdvertise and FavorLocal and FavorSource.
Note that this bit works only with features that are listed by the ADVERTISE property.
Set this attribute and if the listed feature is not a parent or child, the feature is installed according to FavorLocal and FavorSource.
Set this attribute for the parent of a listed feature and the parent is installed.
Set this attribute for the child of a listed feature and the state of the child is Absent.
Omit this attribute and if the listed feature is not a parent or child, the feature state is Advertise.
Omit this attribute and if the listed feature is a parent or child, the state of both features is Advertise.
Omit this attribute and the user interface displays an option to change the feature state to Absent.
Set FollowParent and UIDisallowAbsent to ensure a child feature follows the state of the parent feature.
Setting this attribute not only affects the UI, but also forces the feature to the install state whether the feature is visible in the UI or not.
Examples:
Win32 MSI API: MsiGetComponentState
Win32 MSI APIs: MsiGetComponentState, MsiSetComponentState
Win32 MSI API: MsiEnumComponentCosts
Win32 MSI API: MsiEnumComponents
Win32 MSI API: MsiEnumComponentsEx
Win32 MSI API: MsiGetProductCode
Because clients are not ordered, any new component has an arbitrary index. This means that the property may return clients in any order.
Win32 MSI API: MsiEnumClients, MsiEnumClientsEx
Win32 MSI API: MsiGetComponentPath, MsiGetComponentPathEx
If the component is a registry key, the registry roots are represented numerically. For example, a registry path of "HKEY_CURRENT_USER\SOFTWARE\Microsoft" would be returned as "01:\SOFTWARE\Microsoft". The registry roots returned are defined as follows: HKEY_CLASSES_ROOT=00, HKEY_CURRENT_USER=01, HKEY_LOCAL_MACHINE=02, HKEY_USERS=03, HKEY_PERFORMANCE_DATA=04
Win32 MSI APIs: MsiGetComponentPath, MsiGetComponentPathEx, MsiLocateComponent
Because qualifiers are not ordered, any new qualifier has an arbitrary index, meaning the function can return qualifiers in any order.
Win32 MSI API: MsiEnumComponentQualifiers
Win32 MSI API: MsiEnumComponentQualifiers
A custom action method must be defined as public and static,
take a single
The
The client can use the following procedure for data access:
Because this constructor initiates database access, it cannot be used with a running installation.
The Database object should be
Win32 MSI API: MsiOpenDatabase
When a database is opened as the output of another database, the summary information stream of the output database is actually a read-only mirror of the original database and thus cannot be changed. Additionally, it is not persisted with the database. To create or modify the summary information for the output database it must be closed and re-opened.
The Database object should be
The database is opened in
Win32 MSI API: MsiOpenDatabase
Because this constructor initiates database access, it cannot be used with a running installation.
The database object should be
A database opened in
Win32 MSI API: MsiOpenDatabase
Win32 MSI API: MsiGetDatabaseState
Getting or setting the code page is a slow operation because it involves an export or import of the codepage data to/from a temporary file.
The object returned from this property does not need to be explicitly persisted or closed. Any modifications will be automatically saved when the database is committed.
Win32 MSI API: MsiGetSummaryInformation
This method is only provided for interop purposes. A Database object
should normally be obtained from
Once an item is scheduled, it cannot be unscheduled.
The items cannot be deleted if the Database object is auto-disposed by the garbage collector; the handle must be explicitly closed.
Files which are read-only or otherwise locked cannot be deleted, but they will not cause an exception to be thrown.
Merge does not copy over embedded cabinet files or embedded transforms from the reference database into the target database. Embedded data streams that are listed in the Binary table or Icon table are copied from the reference database to the target database. Storage embedded in the reference database are not copied to the target database.
The Merge method merges the data of two databases. These databases must have the same codepage. The merge fails if any tables or rows in the databases conflict. A conflict exists if the data in any row in the first database differs from the data in the corresponding row of the second database. Corresponding rows are in the same table of both databases and have the same primary key in both databases. The tables of non-conflicting databases must have the same number of primary keys, same number of columns, same column types, same column names, and the same data in rows with identical primary keys. Temporary columns however don't matter in the column count and corresponding tables can have a different number of temporary columns without creating conflict as long as the persistent columns match.
If the number, type, or name of columns in corresponding tables are different, the schema of the two databases are incompatible and the installer will stop processing tables and the merge fails. The installer checks that the two databases have the same schema before checking for row merge conflicts. If the schemas are incompatible, the databases have be modified.
If the data in particular rows differ, this is a row merge conflict, the merge fails and creates a new table with the specified name. The first column of this table is the name of the table having the conflict. The second column gives the number of rows in the table having the conflict.
Win32 MSI API: MsiDatabaseMerge
MsiDatabaseMerge does not copy over embedded cabinet files or embedded transforms from the reference database into the target database. Embedded data streams that are listed in the Binary table or Icon table are copied from the reference database to the target database. Storage embedded in the reference database are not copied to the target database.
The Merge method merges the data of two databases. These databases must have the same codepage. The merge fails if any tables or rows in the databases conflict. A conflict exists if the data in any row in the first database differs from the data in the corresponding row of the second database. Corresponding rows are in the same table of both databases and have the same primary key in both databases. The tables of non-conflicting databases must have the same number of primary keys, same number of columns, same column types, same column names, and the same data in rows with identical primary keys. Temporary columns however don't matter in the column count and corresponding tables can have a different number of temporary columns without creating conflict as long as the persistent columns match.
If the number, type, or name of columns in corresponding tables are different, the schema of the two databases are incompatible and the installer will stop processing tables and the merge fails. The installer checks that the two databases have the same schema before checking for row merge conflicts. If the schemas are incompatible, the databases have be modified.
Win32 MSI API: MsiDatabaseMerge
To check whether a table exists regardless of persistence,
use
Win32 MSI API: MsiDatabaseIsTablePersistent
To check whether a column exists regardless of persistence,
use
For a database open in
For a database open in
For a database open in
Win32 MSI API: MsiDatabaseCommit
Win32 MSI API: MsiDatabaseExport
Win32 MSI API: MsiDatabaseImport
The directory will be created if it does not already exist.
Win32 MSI API: MsiDatabaseExport
Win32 MSI API: MsiDatabaseImport
This method is equivalent to directly calling the
The Record object should be
Win32 MSI API: MsiCreateRecord
The
The View object should be
Win32 MSI API: MsiDatabaseOpenView
The
Win32 MSI APIs: MsiDatabaseOpenView, MsiViewExecute
Win32 MSI APIs: MsiDatabaseOpenView, MsiViewExecute
The
Multiple rows columns will be collapsed into a single one-dimensional list.
Win32 MSI APIs: MsiDatabaseOpenView, MsiViewExecute, MsiViewFetch
Multiple rows columns will be collapsed into a single one-dimensional list.
Win32 MSI APIs: MsiDatabaseOpenView, MsiViewExecute, MsiViewFetch
The
Multiple rows columns will be collapsed into a single one-dimensional list.
Win32 MSI APIs: MsiDatabaseOpenView, MsiViewExecute, MsiViewFetch
Multiple rows columns will be collapsed into a single one-dimensional list.
Win32 MSI APIs: MsiDatabaseOpenView, MsiViewExecute, MsiViewFetch
The
Multiple rows columns will be collapsed into a single on-dimensional list.
Win32 MSI APIs: MsiDatabaseOpenView, MsiViewExecute, MsiViewFetch
Multiple rows columns will be collapsed into a single on-dimensional list.
Win32 MSI APIs: MsiDatabaseOpenView, MsiViewExecute, MsiViewFetch
The
Win32 MSI APIs: MsiDatabaseOpenView, MsiViewExecute, MsiViewFetch
Win32 MSI APIs: MsiDatabaseOpenView, MsiViewExecute, MsiViewFetch
A transform can add non-primary key columns to the end of a table. A transform cannot be created that adds primary key columns to a table. A transform cannot be created that changes the order, names, or definitions of columns.
If the transform is to be applied during an installation you must use the
Win32 MSI API: MsiDatabaseGenerateTransform
Win32 MSI API: MsiCreateTransformSummaryInfo
Win32 MSI API: MsiDatabaseApplyTransform
Win32 MSI API: MsiDatabaseApplyTransform
Win32 MSI API: MsiDatabaseApplyTransform
If the record is passed to
The following methods and properties may report extended error data:
The Record object should be
Win32 MSI API: MsiGetLastErrorRecord
To restore the previous UI handler, a second call is made to SetExternalUI using the
ExternalUIHandler returned by the first call to SetExternalUI and specifying
The external user interface handler does not have full control over the external user
interface unless
SetExternalUI should only be called from a bootstrapping application. You cannot call it from a custom action
Win32 MSI API: MsiSetExternalUI
To restore the previous UI handler, a second call is made to SetExternalUI using the
ExternalUIHandler returned by the first call to SetExternalUI and specifying
The external user interface handler does not have full control over the external user
interface unless
SetExternalUI should only be called from a bootstrapping application. You cannot call it from a custom action
Win32 MSI API: MsiSetExternalUIRecord
Win32 MSI API: MsiSetInternalUI
Win32 MSI API: MsiSetInternalUI
This method takes effect on any new installation processes. Calling this method from within a custom action will not start logging for that installation.
Win32 MSI API: MsiEnableLog
The UseFeature method should only be used on features known to be published. The application should determine the status of the feature by calling either the FeatureState method or Features method.
Win32 MSI APIs: MsiUseFeature, MsiUseFeatureEx
Note that only one Session object can be opened by a single process. OpenPackage cannot be used in a custom action because the active installation is the only session allowed.
A "safe" Session object ignores the current computer state when opening the package and prevents changes to the current computer state.
The Session object should be
Win32 MSI APIs: MsiOpenPackage, MsiOpenPackageEx
Note that only one Session object can be opened by a single process. OpenPackage cannot be used in a custom action because the active installation is the only session allowed.
A "safe" Session object ignores the current computer state when opening the package and prevents changes to the current computer state.
The Session object should be
Win32 MSI APIs: MsiOpenPackage, MsiOpenPackageEx
Note that only one Session object can be opened by a single process. OpenProduct cannot be used in a custom action because the active installation is the only session allowed.
The Session object should be
Win32 MSI API: MsiOpenProduct
Win32 MSI API: MsiProvideComponent
Win32 MSI APIs: MsiProvideQualifiedComponent MsiProvideQualifiedComponentEx
Win32 MSI API: MsiProvideAssembly
Win32 MSI API: MsiInstallMissingComponent
Win32 MSI API: MsiInstallMissingFile
Win32 MSI API: MsiReinstallFeature
Win32 MSI API: MsiReinstallProduct
To completely remove a product, set REMOVE=ALL in
This method displays the user interface with the current settings and
log mode. You can change user interface settings with the
The
Win32 MSI API: MsiInstallProduct
This method displays the user interface with the current settings and
log mode. You can change user interface settings with the
The
Win32 MSI APIs: MsiConfigureProduct, MsiConfigureProductEx
The
Win32 MSI API: MsiConfigureFeature
The
Win32 MSI API: MsiApplyPatch
The
Win32 MSI API: MsiApplyPatch
The
Win32 MSI API: MsiRemovePatches
If an item in
As this overload uses InstallContext.None, it does not consider the current state of the system.
Win32 MSI API: MsiDetermineApplicablePatches
If an item in
Passing an InstallContext of None only analyzes the MSI file; it does not consider the current state of the system. You cannot use InstallContext.None with a ProductCode GUID.
Win32 MSI APIs: MsiDetermineApplicablePatches MsiDeterminePatchSequence
Win32 MSI API: MsiApplyMultiplePatches
Win32 MSI API: MsiExtractPatchXMLData
Win32 MSI API: MsiNotifySidChange
Win32 MSI APIs: MsiAdvertiseProduct, MsiAdvertiseProductEx
Win32 MSI APIs: MsiAdvertiseProduct, MsiAdvertiseProductEx
Win32 MSI APIs: MsiAdvertiseProduct, MsiAdvertiseProductEx
The process calling this function must be running under the LocalSystem account. To advertise an application for per-user installation to a targeted user, the thread that calls this function must impersonate the targeted user. If the thread calling this function is not impersonating a targeted user, the application is advertised to all users for installation with elevated privileges.
The process calling this function must be running under the LocalSystem account. To advertise an application for per-user installation to a targeted user, the thread that calls this function must impersonate the targeted user. If the thread calling this function is not impersonating a targeted user, the application is advertised to all users for installation with elevated privileges.
Win32 MSI API: MsiProcessAdvertiseScript
Only the following properties will be filled in in the returned object:
Win32 MSI API: MsiGetProductInfoFromScript
The returned string may have tokens such as [2] and [3] that are meant to be substituted with context-specific values.
Error numbers greater than 2000 refer to MSI "internal" errors, and are always returned in English.
The returned string may have tokens such as [2] and [3] that are meant to be substituted with context-specific values.
Error numbers greater than 2000 refer to MSI "internal" errors, and are always returned in English.
Error numbers greater than 2000 refer to MSI "internal" errors, and are always returned in English.
Error numbers greater than 2000 refer to MSI "internal" errors, and are always returned in English.
Win32 MSI API: MsiGetFileVersion
Win32 MSI API: MsiGetFileVersion
Win32 MSI API: MsiGetFileHash
Win32 MSI API: MsiGetShortcutTarget
Win32 MSI API: MsiVerifyPackage
Win32 MSI API: MsiGetPatchFileList
Win32 MSI API: MsiGetFeatureState
When changing the feature action, the action state of all the Components linked to the changed Feature records are also updated appropriately, based on the new feature Select state. All Features can be configured at once by specifying the keyword ALL instead of a specific feature name.
Win32 MSI APIs: MsiGetFeatureState, MsiSetFeatureState
Win32 MSI API: MsiGetFeatureValidStates
Win32 MSI APIs: MsiGetFeatureInfo, MsiSetFeatureAttributes
Since the lpAttributes paramter of
MsiGetFeatureInfo
does not contain an equivalent flag for
Since the dwAttributes parameter of
MsiSetFeatureAttributes
does not contain an equivalent flag for
Win32 MSI API: MsiGetFeatureInfo
Win32 MSI API: MsiGetFeatureInfo
Win32 MSI API: MsiGetFeatureCost
Win32 MSI API: MsiQueryFeatureState
If no usage metrics are recorded, the
Win32 MSI API: MsiGetFeatureUsage
These classes implement the
The finalizer of this class will NOT close the handle if it is still open, because finalization can run on a separate thread from the application, resulting in potential problems if handles are closed from that thread. It is best that the handle be closed manually as soon as it is no longer needed, as leaving lots of unused handles open can degrade performance.
Win32 MSI API: MsiCloseHandle
The finalizer of this class will NOT close the handle if it is still open, because finalization can run on a separate thread from the application, resulting in potential problems if handles are closed from that thread. It is best that the handle be closed manually as soon as it is no longer needed, as leaving lots of unused handles open can degrade performance.
This method is merely an alias for the
Win32 MSI API: MsiCloseHandle
The hash code is derived from the native integer handle.
Win32 MSI API: InitializeEmbeddedUI
Win32 MSI API: EmbeddedUIHandler
Win32 MSI API: ShutdownEmbeddedUI
This temporary space requirement is space needed only for the duration of the installation, over the final footprint on disk.
If
The
Win32 MSI APIs: MsiBeginTransaction MsiJoinTransaction MsiEndTransaction
Win32 MSI API: MsiBeginTransaction
Win32 MSI API: MsiJoinTransaction
Runs any Commit Custom Actions and commits to the system any changes to Win32 or common language runtime assemblies. Deletes the rollback script, and after using this option, the transaction's changes can no longer be undone with a Rollback Installation.
This method can only be called by the current owner of the transaction.
Win32 MSI API: MsiEndTransaction
This method can only be called by the current owner of the transaction.
Win32 MSI API: MsiEndTransaction
Win32 MSI API: MsiEnumPatches
Win32 MSI APIs: MsiEnumPatchesEx
All available user contexts will be queried.
If the
This value may not be available for per-user, non-managed applications if the user is not logged on.
Even if this property is true, the installer can still block the uninstallation if this patch is required by another patch that cannot be uninstalled.
Win32 MSI APIs: MsiGetPatchInfo, MsiGetPatchInfoEx
Win32 MSI API: MsiEnumRelatedProducts
Win32 MSI API: MsiEnumProducts,
Win32 MSI API: MsiEnumProductsEx
All available user contexts will be queried.
Because features are not ordered, any new feature has an arbitrary index, meaning this property can return features in any order.
Win32 MSI API: MsiEnumFeatures
Note that this property does not take into account policies such as AlwaysInstallElevated, but verifies that the local system owns the product's registry data.
For more information, see ProductID
Win32 MSI APIs: MsiGetProductInfo, MsiGetProductInfoEx
Win32 MSI APIs: MsiQueryFeatureState, MsiQueryFeatureStateEx
Win32 MSI API: MsiQueryComponentState
This method is typically called by an application during the first run of the application. The application
first gets the
The CollectUserInfo method invokes a FirstRun dialog from the product installation database.
Win32 MSI API: MsiCollectUserInfo
Most methods on the Record class have overloads that allow using either a number or a name to designate a field. However note that field names only exist when the Record is directly returned from a query on a database. For other records, attempting to access a field by name will result in an InvalidOperationException.
The Record object should be
Win32 MSI API: MsiCreateRecord
The Record object should be
Win32 MSI API: MsiCreateRecord
Win32 MSI API: MsiRecordGetFieldCount
When getting a field, the type of the object returned depends on the type of the Record field. The object will be one of: Int16, Int32, String, Stream, or null.
When setting a field, the type of the object provided will be converted to match the View query that returned the record, or if Record was not returned from a view then the type of the object provided will determine the type of the Record field. The object should be one of: Int16, Int32, String, Stream, or null.
Record fields are indexed starting with 1. Field 0 is a special format field.
When getting a field, the type of the object returned depends on the type of the Record field. The object will be one of: Int16, Int32, String, Stream, or null. If the Record was returned from a View, the type will match that of the field from the View query. Otherwise, the type will match the type of the last value set for the field.
When setting a field, the type of the object provided will be converted to match the View query that returned the Record, or if Record was not returned from a View then the type of the object provided will determine the type of the Record field. The object should be one of: Int16, Int32, String, Stream, or null.
The type-specific getters and setters are slightly more efficient than this property, since they don't have to do the extra work to infer the value's type every time.
Win32 MSI APIs: MsiRecordGetInteger, MsiRecordGetString, MsiRecordSetInteger, MsiRecordSetString
This method is only provided for interop purposes. A Record object
should normally be obtained by calling
The handle will be closed when this object is disposed or finalized.
Win32 MSI API: MsiRecordClearData
Win32 MSI API: MsiRecordIsNull
The returned data size is 0 if the field is null, non-existent, or an internal object pointer. The method also returns 0 if the handle is not a valid Record handle.
If the data is in integer format, the property returns 2 or 4.
If the data is in string format, the property returns the character count (not including the NULL terminator).
If the data is in stream format, the property returns the byte count.
Win32 MSI API: MsiRecordDataSize
The returned data size is 0 if the field is null, non-existent, or an internal object pointer. The method also returns 0 if the handle is not a valid Record handle.
If the data is in integer format, the property returns 2 or 4.
If the data is in string format, the property returns the character count (not including the NULL terminator).
If the data is in stream format, the property returns the byte count.
Win32 MSI API: MsiRecordGetInteger
Win32 MSI API: MsiRecordGetInteger
Win32 MSI API: MsiRecordSetInteger
Win32 MSI API: MsiRecordSetInteger
Win32 MSI API: MsiRecordGetString
Win32 MSI API: MsiRecordSetString
This method is capable of directly extracting substorages. To do so, first select both the `Name` and `Data` column of the `_Storages` table, then get the stream of the `Data` field. However, substorages may only be extracted from a database that is open in read-only mode.
Win32 MSI API: MsiRecordReadStream
This method is capable of directly extracting substorages. To do so, first select both the `Name` and `Data` column of the `_Storages` table, then get the stream of the `Data` field. However, substorages may only be extracted from a database that is open in read-only mode.
This method is not capable of reading substorages. To extract a substorage,
use
Win32 MSI API: MsiRecordReadStream
This method is not capable of reading substorages. To extract a substorage,
use
The contents of the specified file are read into a stream object. The stream persists if the Record is inserted into the Database and the Database is committed.
To reset the stream to its beginning you must pass in null for filePath. Do not pass an empty string, "", to reset the stream.
Setting a stream with this method is more efficient than setting a field to a FileStream object.
Win32 MSI API: MsiRecordsetStream
The contents of the specified file are read into a stream object. The stream persists if the Record is inserted into the Database and the Database is committed. To reset the stream to its beginning you must pass in null for filePath. Do not pass an empty string, "", to reset the stream.
Setting a stream with this method is more efficient than setting a field to a FileStream object.
The stream persists if the Record is inserted into the Database and the Database is committed.
Win32 MSI API: MsiRecordsetStream
The stream persists if the Record is inserted into the Database and the Database is committed.
If field 0 of the Record is set to a nonempty string, it is used to format the data in the Record.
Win32 MSI API: MsiFormatRecord
If field 0 of the Record is set to a nonempty string, it is used to format the data in the Record.
Win32 MSI API: MsiFormatRecord
Win32 MSI API: MsiFormatRecord
Win32 MSI API: MsiFormatRecord
This enumeration MUST stay in sync with the unmanaged equivalent in RemoteMsiSession.h!
The implementation of this delegate is provided by the custom action host DLL.
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
If this method is called with a new source, the installer adds the source to the end of the source list.
If this method is called with a source already existing in the source list, it has no effect.
Win32 MSI APIs: MsiSourceListAddSource, MsiSourceListAddSourceEx
If this method is called with a new source and
If this method is called with a source already existing in the source
list and
If the method is called with an existing source in the source list
and
If the method is called with a new source and Index is set to a
non-zero value, the source is inserted at the position specified by
If
Win32 MSI API: MsiSourceListAddSourceEx
Win32 MSI API: MsiSourceListClearAll
Win32 MSI API: MsiSourceListClearAllEx
Win32 MSI API: MsiSourceListClearAllEx
Win32 MSI API: MsiSourceListClearSource
Win32 MSI API: MsiSourceListEnumSources
Win32 MSI APIs: MsiSourceListForceResolution, MsiSourceListForceResolutionEx
Win32 MSI API: MsiSourceListGetInfo
Win32 MSI API: MsiSourceListAddMediaDisk
Win32 MSI API: MsiSourceListClearAllEx
Win32 MSI API: MsiSourceListClearMediaDisk
Win32 MSI API: MsiSourceListEnumMediaDisks
The SummaryInfo object should be
Win32 MSI API: MsiGetSummaryInformation
The Title summary information property briefly describes the type of installer package. Phrases such as "Installation Database" or "Transform" or "Patch" may be used for this property.
Win32 MSI APIs: MsiSummaryInfoGetProperty, MsiSummaryInfoSetProperty
The Subject summary information property conveys to a file browser the product that can be installed using the logic and data in this installer database. For example, the value of the summary property for Microsoft Office 97 would be "Microsoft Office 97 Professional". This value is typically set from the installer property ProductName.
Win32 MSI APIs: MsiSummaryInfoGetProperty, MsiSummaryInfoSetProperty
The Author summary information property conveys to a file browser the manufacturer of the installation database. This value is typically set from the installer property Manufacturer.
Win32 MSI APIs: MsiSummaryInfoGetProperty, MsiSummaryInfoSetProperty
The Keywords summary information property is used by file browsers to hold keywords that permit the database file to be found in a keyword search. The set of keywords typically includes "Installer" as well as product-specific keywords, and may be localized.
Win32 MSI APIs: MsiSummaryInfoGetProperty, MsiSummaryInfoSetProperty
The Comments summary information property conveys the general purpose of the installer database. By convention, the value for this summary property is set to the following:
"This installer database contains the logic and data required to install <product name>."
where <product name> is the name of the product being installed. In general the value for this summary property only changes in the product name, nothing else.
Win32 MSI APIs: MsiSummaryInfoGetProperty, MsiSummaryInfoSetProperty
The Template summary information propery indicates the platform and language versions supported by the database.
The syntax of the Template Summary property information is: [platform property][,platform property][,...];[language id][,language id][,...]
For example, the following are all valid values for the Template Summary property:
If this is a 64-bit Windows Installer, enter Intel64 in the Template summary information property. Note that an installation package cannot have both the Intel and Intel64 properties set.
If the current platform does not match one of the platforms specified then the installer will not process the package. Not specifying a platform implies that the package is platform-independent.
Entering 0 in the language ID field of the Template summary information property, or leaving this field empty, indicates that the package is language neutral.
There are variations of this property depending on whether it is in a source installer database or a transform.
Source Installer Database - Only one language can be specified in a source installer database. Merge Modules are the only packages that may have multiple languages. For more information, see Multiple Language Merge Modules.
Transform - In a transform file, only one language may be specified. The specified platform and language determine whether a transform can be applied to a particular database. The platform property and the language property can be left blank if no transform restriction relies on them to validate the transform.
This summary property is REQUIRED.
Win32 MSI APIs: MsiSummaryInfoGetProperty, MsiSummaryInfoSetProperty
The installer sets the Last Saved By summary information property to the value of the LogonUser property during an administrative installation. The installer never uses this property and a user never needs to modify it. Developers of a database editing tool may use this property to track the last person to modify the database. This property should be left set to null in a final shipping database.
In a transform, this summary property contains the platform and language ID(s) that a database should have after it has been transformed. The property specifies to what the Template should be set in the new database.
Win32 MSI APIs: MsiSummaryInfoGetProperty, MsiSummaryInfoSetProperty
The Revision Number summary information property contains the package code for the installer package. The package code is a unique identifier of the installer package.
The Revision Number summary information property of a patch package specifies the GUID patch code for the patch. This is followed by a list of patch code GUIDs for obsolete patches that are removed when this patch is applied. The patch codes are concatenated with no delimiters separating GUIDs in the list.
The Revision Number summary information property of a transform package lists the product code GUIDs and version of the new and original products and the upgrade code GUID. The list is separated with semicolons as follows.
Original-Product-Code Original-Product-Version ; New-Product Code New-Product-Version; Upgrade-Code
This summary property is REQUIRED.
Win32 MSI APIs: MsiSummaryInfoGetProperty, MsiSummaryInfoSetProperty
The CreatingApp summary information property conveys which application created the installer database. In general the value for this summary property is the name of the software used to author this database.
Win32 MSI APIs: MsiSummaryInfoGetProperty, MsiSummaryInfoSetProperty
The LastPrintTime summary information property can be set to the date and time during an administrative installation to record when the administrative image was created. For non-administrative installations this property is the same as the CreateTime summary information property.
Win32 MSI APIs: MsiSummaryInfoGetProperty, MsiSummaryInfoSetProperty
The CreateTime summary information property conveys when the installer database was created.
Win32 MSI APIs: MsiSummaryInfoGetProperty, MsiSummaryInfoSetProperty
The LastSaveTime summary information property conveys when the last time the installer database was modified. Each time a user changes an installation the value for this summary property is updated to the current system time/date at the time the installer database was saved. Initially the value for this summary property is set to null to indicate that no changes have yet been made.
Win32 MSI APIs: MsiSummaryInfoGetProperty, MsiSummaryInfoSetProperty
The Codepage summary information property is the numeric value of the ANSI code page used for any strings that are stored in the summary information. Note that this is not the same code page for strings in the installation database. The Codepage summary information property is used to translate the strings in the summary information into Unicode when calling the Unicode API functions. The Codepage summary information property must be set before any string properties are set in the summary information.
Win32 MSI APIs: MsiSummaryInfoGetProperty, MsiSummaryInfoSetProperty
For an installation package, the PageCount summary information property contains the minimum installer version required. For Windows Installer version 1.0, this property must be set to the integer 100. For 64-bit Windows Installer Packages, this property must be set to the integer 200.
For a transform package, the PageCount summary information property contains minimum installer version required to process the transform. Set to the greater of the two PageCount summary information property values belonging to the databases used to generate the transform.
The PageCount summary information property is set to null in patch packages.
This summary property is REQUIRED.
Win32 MSI APIs: MsiSummaryInfoGetProperty, MsiSummaryInfoSetProperty
The WordCount summary information property indicates the type of source file image. If this property is not present, it defaults to 0. Note that this property is stored in place of the standard Count property.
This property is a bit field. New bits may be added in the future. At present the following bits are
available:
These are combined to give the WordCount summary information property one of the following values
indicating a type of source file image:
Note that if the package is marked as compressed (bit 1 is set), the installer only installs files
located at the root of the source. In this case, even files marked as uncompressed in the File table must
be located at the root to be installed. To specify a source image that has both a cabinet file (compressed
files) and uncompressed files that match the tree in the Directory table, mark the package as uncompressed
by leaving bit 1 unset (value=0) in the WordCount summary information property and set
For a patch package, the WordCount summary information property specifies the patch engine that was used to create the patch files. The default value is 1 and indicates that MSPATCH was used to create the patch A value of "2" means that the patch is using smaller, optimized, files available only with Windows Installer version 1.2 or later. A patch with a WordCount of "2" fails immediately if used with a Windows Installer version earlier than 1.2. A patch with a WordCount of "3" fails immediately if used with a Windows Installer version earlier than 2.0.
This summary property is REQUIRED.
Win32 MSI APIs: MsiSummaryInfoGetProperty, MsiSummaryInfoSetProperty
The CharacterCount summary information property is only used in transforms. This part of the summary information stream is divided into two 16-bit words. The upper word contains the transform validation flags. The lower word contains the transform error condition flags.
Win32 MSI APIs: MsiSummaryInfoGetProperty, MsiSummaryInfoSetProperty
The Security summary information property conveys whether the package should be opened as read-only. The database
editing tool should not modify a read-only enforced database and should issue a warning at attempts to modify a
read-only recommended database. The following values of this property are applicable to Windows Installer files:
This property should be set to read-only recommended (2) for an installation database and to read-only enforced (4) for a transform or patch.
Win32 MSI APIs: MsiSummaryInfoGetProperty, MsiSummaryInfoSetProperty
This method may only be called once after all the property values have been set. Properties may still be read after the stream is written.
Win32 MSI API: MsiSummaryInfoPersist
This property queries the database every time it is called, to ensure the returned values are up-to-date. For best performance, hold onto the returned collection if using it more than once.
The values are expressed as question-mark tokens, to be supplied by the record.
The columns are listed explicitly in the SELECT string, as opposed to using "SELECT *".
Win32 MSI API: MsiViewGetColumnInfo
Win32 MSI API: MsiViewExecute
Win32 MSI API: MsiViewExecute
The Record object should be
Win32 MSI API: MsiViewFetch
You can update or delete a record immediately after inserting, or seeking provided you have NOT modified the 0th field of the inserted or sought record.
To execute any SQL statement, a View must be created. However, a View that does not create a result set, such as CREATE TABLE, or INSERT INTO, cannot be used with any of the Modify methods to update tables though the view.
You cannot fetch a record containing binary data from one database and then use
that record to insert the data into another database. To move binary data from one database
to another, you should export the data to a file and then import it into the new database
using a query and the
Note that custom actions can only add, modify, or remove temporary rows, columns, or tables from a database. Custom actions cannot modify persistent data in a database, such as data that is a part of the database stored on disk.
Win32 MSI API: MsiViewModify
The Record must have been obtained by calling
See
Win32 MSI API: MsiViewModify
Fails if a row with the same primary keys exists. Fails with a read-only database. This method cannot be used with a View containing joins.
See
Win32 MSI API: MsiViewModify
Only non-primary keys can be updated. The Record must have been obtained by calling
See
Win32 MSI API: MsiViewModify
Updates record if the primary keys match an existing row and inserts if they do not match. Fails with a read-only database. This method cannot be used with a View containing joins.
See
Win32 MSI API: MsiViewModify
The Record must have been obtained by calling
See
Win32 MSI API: MsiViewModify
The Record must have been obtained by calling
See
Win32 MSI API: MsiViewModify
Fails if a row with the same primary key exists. Works only with read-write records. This method cannot be used with a View containing joins.
See
Win32 MSI API: MsiViewModify
After seeking, the Record may then be used for subsequent Update, Delete, and Refresh operations. All primary key columns of the table must be in the query and the Record must have at least as many fields as the query. Seek cannot be used with multi-table queries. This method cannot be used with a View containing joins.
See
Win32 MSI API: MsiViewModify
Works only with read-write records. This method cannot be used with a View containing joins.
See
Win32 MSI API: MsiViewModify
The Record must have been obtained by calling
See
Win32 MSI APIs: MsiViewModify, MsiViewGetError
Checks for duplicate keys. The Record must have been obtained by
calling
See
Win32 MSI APIs: MsiViewModify, MsiViewGetError
Works with read-write and read-only records. This method cannot be used with a View containing joins.
See
Win32 MSI APIs: MsiViewModify, MsiViewGetError
Validation does not check for the existence of the primary keys of this row in properties or strings. Does not check if a column is a foreign key to multiple tables. Works with read-write and read-only records. This method cannot be used with a View containing joins.
See
Win32 MSI APIs: MsiViewModify, MsiViewGetError
Each Record object should be
Win32 MSI API: MsiViewFetch