diff --git a/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerService/Config.wxi b/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerService/Config.wxi
deleted file mode 100644
index 8265cb6f..00000000
--- a/WebsitePanel.Installer/Sources/WebsitePanel.SchedulerService/Config.wxi
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- 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: - MsiEnumComponentCosts -
- Win32 MSI API: - MsiGetComponentState -
- Win32 MSI APIs: - MsiGetComponentState, - MsiSetComponentState -
- Win32 MSI API: - MsiEnumComponentsEx -
- Win32 MSI API: - MsiGetProductCode -
- Win32 MSI API: - MsiEnumComponents -
- 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:
-
-
- 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. -
- 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 -
- 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 -
- 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 -
- 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: - MsiGetFeatureCost -
- 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: - MsiQueryFeatureState -
- If no usage metrics are recorded, the
- Win32 MSI API: - MsiGetFeatureUsage -
- 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 APIs: - MsiEnumPatchesEx -
- All available user contexts will be queried. -
- If the
- Win32 MSI API: - MsiEnumPatches -
- 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: - MsiEnumProductsEx -
- All available user contexts will be queried. -
- 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 -
- Win32 MSI API: - MsiEnumProducts, -
- 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 -
- 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 -
- 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 -
- 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 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. -
- 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 -
- 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 -
- 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 -
- 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 -
- 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 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: - 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 -
- Win32 MSI API: - MsiViewGetColumnInfo -