#$Microsoft Installer Server Contents

Design Summary
Execution Flow
Script Format
Script Opcodes
Deliverables
#$K+Installer Execution Flow
This diagram shows how the various objects interact. It does not indicate how the code is packaged into modules, as most of the code is shared between the server and client implementation. The script is not physically sent between processes; only its access is transferred.

 Client operating in User Account  | Server, can operate as an OS service
                                   |  
 ÚÄÄÄÄÄÄÄÄ¿  ÚÄÄÄÄÄÄÄÄ¿  ÚÄÄÄÄÄÄ¿ RPC     ÚÄÄÄÄÄÄÄÄÄ¿   ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
 ³Product ³  ³Product ³  ³ConfigÃÍÍÍÍÍÍÍÍ>³ Install ³   ³Configuration³
 ³Database³<¿³Launcher³Ú>³Proxy ³  |      ³ Server  ³ Ú>³Database     ³
 ÀÄÄÄÄÄÄÄÄÙ ³ÀÄÄÂÄÄÄÄÄÙ³ ÀÄÄÄÄÄÄÙ  |      ÀÄÄÄÄÄÄÂÄÄÙ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
            ÀÄ¿ ³  ÚÄÄÄÙ           |             ³    ³   
 ÚÄÄÄÄÄÄÄ¿  ÚÄÁÄÁÄÄÁÄ¿    Messages |    ÚÄÄÄÄÄÄÄ¿³ ÚÄÄÁÄÄÄÄ¿  ÚÄÄÄÄÄÄÄ¿
 ³UI     ³<Ä´ Install³<ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ´Script ³À>³Config.³<Ä´Install³
 ³Handler³  ³ Engine ³             | ÉÍ>³Execute³<Ä´ManagerÃÄ>³Engine ³
 ÀÂÄÄÄÄÄÄÙ  ÀÄÄÄÄÄÂÄÂÙ             | º  ÀÄÂÄÄÄÄÄÙ  ÀÄÄÄÄÄÄÂÙ  ÀÂÄÄÄÄÄÄÙ
  ³               ³ ³              | º    ³               ³    ³
  ³  ÚÄÄÄÄÄÄÄÄÄ¿  ³ ³  ÚÄÄÄÄÄÄÄÄ¿  | º    ³  ÚÄÄÄÄÄÄÄÄÄ¿  ³    ³
  ÀÄ>³ System  ³<ÄÙ ÀÄ>³Script  ÃÍÍÍÍ¼    ÀÄ>³ System  ³<ÄÙ    ³
     ³ Services³<ÄÄÄÄÄÄ´Generate³ Script     ³ Services³<ÄÄÄÄÄÄÙ
     ÀÄÄÄÄÄÄÄÄÄÙ       ÀÄÄÄÄÄÄÄÄÙ  |         ÀÄÄÄÄÄÄÄÄÄÙ
#$K+Deliverable Components
The following components will be delivered with each build of the Microsoft Installer. Because the Microsoft Installer is a cross platform application, separate sets of components are produced for each platform.
Core installer components
MSISRV.DLL   system services and DBMS, shared by all other modules, IMsiServices
MSIENG.DLL   install logic, action processing, IMsiEngine, IMsiExecute, IMsiConfigurationMangaer
MSIHND.DLL   error handling, dialog management, operates only in user security, IMsiHandler
MSIEXEC.EXE  install server -- local OLE server, maintenance launcher, installable as OS service
INSTALL.EXE  install launcher with product-specific resources, installer for MSI components

Authoring tools
MSIAUTO.DLL  OLE automation for core components, ODBC driver for database services
MSIGEN.DLL   generates installation database from product root
MSIDIFF.DLL  generates installation database from SYSDIFF output
MSIEDIT.EXE  authoring environment, launches tools, edits tables and views

#$K+Installer Enhancements Design Summary

Execution Phases
In order to operate in a secure environment, with the user's privileges locked down, the installation process is divided into two phases, acquisition where the install engine interacts with the installation database, the environment and the user to determine the set of operations required, and execution where the system update operations take place. The acquistion phase operates with user permissions, as it generally requires UI such as dialogs, progress, billboards, and error handling. The execution phase requires full file and registry permissions and updates the machine's installation configuration database. In a secure system this execution code is installed as a service. The communication between the two phases is handled by the IMsiExecute object, which generates a script file during acquisition and executes the script from with the execution module. Actions which formerly executed in a single operation, have been divided into the acquisition half which queries the database to determine the set of operations, and the execution half which is dispatched from the IMsiExecute object. Generating the script has the following advantages:
 1. The complete set of operations is successfully determined before any updates are done.
 2. The set of operations can be treated as a single transaction, allowing rollback.
 3. The transaction model eliminates concurrency problems by locking out intervening updates.
 4. The package containing the script can be certified once for all operations.
 5. Only a single RPC access is required to pass the set of operations.
 6. Testing and debugging is facilitated by independent generation and execution.
 7. Installation can be simulated by generation without execution.
 8. The script file could be used to analyze or resume execution after a crash or power loss.
Install Action Execution
Install actions typically execute queries against the product database and perform operations using the fetched data parameters. Instead of directly updating the system, which cannot be done from a user program in a secure system, the actions must call the Execute method of the engine with the necessary information packaged in a record object. This is in turn passed to the IMsiExecute object for streaming into the script file. The script is executed by another IMsiExecute object in the install server, which dispatches the regenerated records to the appropriate worker functions. The worker functions are generally associated with corresponding install actions, but may be shared by multiple actions where appropriate. Additional operations are included in the script for syncronization purposes, such as notifications, progress parameters, and media change information.
Module Packaging
The install server, which binds to the configuration manager, is built as a standalone executable and will be installed as a system service when possible. It creates an execute object to run a script and creates an engine object to install and remove shared components controlled by other databases. Being a service means that all UI must be dispatched by RPC to a user process. We are using IDispatch (OLE automation) for the UI handling and configuration manager requests, as OLE will marshal this interface across processes. The server must also manage the security attributes for the OLE RPC connection. The engine and services modules, shared by launchers, configuration manager, and tools, could eventually be combined into a single DLL to reduce disk space. We need to invoke the install server via the command line in a shortcut, add/remove command, or proxy, either by using a separate maintenance launcher or, preferably, by having an external instance of the install server call the service instance using the RPC mechanism.
#$K+Using the Install Server
The install server supports the following command-line options:

Option	Description	
/regserver	Q	
/regnoservice	Registers as a standard OLE server even if it is possible to register as a service.	
/unregister	Unregister the current registration.	
/t <caption>	Show test window. Displays a small window with the specified caption. This can be useful to determine when the server is running.	
/l <scriptfile>	List script. Display the opcodes and data contained in the given scriptfile. The output must be redirected to a file.	
/i <scriptfile>	Install from script. 	
/a <featurelist>	Add features. Must be used after "/c". Separate feature names with commas.	
/x <featurelist>	Remove features. Must be used after "/c". Separate feature names with commas.	
/s <featurelist>	Q	
/c <productkey>	Configure product. Use in combination with "/a", "/x", or "/s" to configure a product's features.	
/? or /h	Display help.	

#$K+Execution Script Format
The execution script is a file containing a linear sequence of install operations to be performed, such as file and registry updates, configuration database updates, UI notifications, and state information for other operations. A binary format is used instead of text for efficiency, to avoid the need for parsing, and to discourage manual editing. Each record consists of an opcode, argument count, and an array of arguments, essentially a serialization of the record objects used by the installer. Data types supported include NULL, integer, and variable length string and binary data. All data is stored as 16-bit integers in Intel byte ordering, with the exception of non-Unicode strings which are padded if necessary to a 16-bit boundary.
Record Structure
The first 16-bit word of a record contains the opcode in the low byte and the argument count in the high byte.
 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
 ³   Argument Count   ³    Operation Code  ³
 ³     (high byte)    ³      (low byte)    ³
 ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Each of the arguments specified is preceded by a 16-bit word that specifies the data type and length of the following argument data. The exact data representation depends upon the type. The maximum length of an argument is 16,383 characters. If ever a longer argument is required, the extended type value is placed in the length field followed by a 32-bit word containing the type bits as the highest bits. Arguments are never null terminated.
 ÚÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
 ³ Data ³ Length of data in characters, or ³
 ³ type ³ reserved codes for integer, NULL ³
 ÀÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Script Data Types

Data type	Length encoding
Null string (all types)	0
32-bit signed integer	0x4000, integer value
Null value	0x8000
extended size	0xC000, 32-bit length, data array
Non-DBCS char string	lstrlenA(), char array
DBCS char string	lstrlenA() + 0x4000, char array
Binary stream	byte count + 0x8000, byte array
Unicode string	lstrlenW() + 0xC000, char array
#$K+Execution Script Opcodes

Special Operations
ixoFail
ixoNoop
ixoHeader
ixoEnd
ixoProductInfo
ixoDialogInfo
ixoRollbackInfo
ixoInfoMessage
ixoActionStart
ixoProgressTotal
ixoProgressTick
ixoFullRecord
ixoDisableRollback
ixoUpdateEstimatedSize
ixoInstallProtectedFiles
ixoInstallSFPCatalogFile

Configuration Manager Operations
ixoAdvtFlagsUpdate
ixoProductRegister
ixoProductUnregister
ixoProductCPDisplayInfoRegister
ixoProductCPDisplayInfoUnregister
ixoUserRegister
ixoComponentRegister
ixoComponentUnregister
ixoProductPublish
ixoProductUnpublish
ixoProductPublishUpdate
ixoPackageCodePublish
ixoUpgradeCodePublish
ixoUpgradeCodeUnpublish
ixoProductPublishClient
ixoProductUnpublishClient
ixoSourceListPublish
ixoSourceListAppend
ixoSourceListUnpublish
ixoFeaturePublish
ixoFeatureUnpublish
ixoComponentPublish
ixoComponentUnpublish

File and Folder Operations
ixoSetSourceFolder
ixoSetTargetFolder
ixoChangeMedia
ixoSetCompanionParent
ixoFileCopy
ixoFileRemove
ixoFolderCreate
ixoFolderRemove
ixoFileBindImage
ixoIconCreate
ixoIconRemove
ixoTypeLibraryRegister
ixoTypeLibraryUnregister
ixoRegisterBackupFile

Registry Operations
ixoRegAllocateSpace
ixoRegOpenKey
ixoRegAddValue
ixoRegRemoveValue
ixoRegCreateKey
ixoRegRemoveKey
ixoRegSelfReg
ixoRegSelfUnreg
ixoRegAppIdInfoRegister
ixoRegAppIdInfoUnregister
ixoRegAppIdInfoRegister64
ixoRegAppIdInfoUnregister64
ixoRegClassInfoRegister
ixoRegClassInfoUnregister
ixoRegClassInfoRegister64
ixoRegClassInfoUnregister64
ixoRegExtensionInfoRegister
ixoRegExtensionInfoUnregister
ixoRegExtensionInfoRegister64
ixoRegExtensionInfoUnregister64
ixoRegMIMEInfoRegister
ixoRegMIMEInfoUnregister
ixoRegMIMEInfoRegister64
ixoRegMIMEInfoUnregister64
ixoRegProgIdInfoRegister
ixoRegProgIdInfoUnregister
ixoRegProgIdInfoRegister64
ixoRegProgIdInfoUnregister64
ixoRegAddRunOnceEntry

Shortcut Operations
ixoShortcutCreate
ixoShortcutRemove

Ini Operations
ixoIniWriteRemoveValue
ixoIniFilePath

Patch Operations
ixoPatchApply
ixoPatchRegister
ixoPatchUnregister
ixoPatchCache

Font Operations
ixoFontRegister
ixoFontUnregister

Resource Operations
ixoResourceUpdate

Database Operations
ixoSummaryInfoUpdate
ixoStreamsRemove
ixoStreamAdd
ixoDatabaseCopy
ixoDatabasePatch

CustomAction Operations
ixoCustomActionSchedule
ixoCustomActionRollback
ixoCustomActionCommit

System Service Operations
ixoServiceControl
ixoServiceInstall

ODBC Operations
ixoODBCInstallDriver
ixoODBCRemoveDriver
ixoODBCDataSource
ixoODBCInstallTranslator
ixoODBCRemoveTranslator
ixoODBCDriverManager

Environmental Variables Operations
ixoUpdateEnvironmentStrings

ComPlus Operations
ixoComPlusRegister
ixoComPlusUnregister

Miscellaneous Operations
ixoSecureTransformCache
#$+KixoSample Operation
	Script Opcodes	Error Codes
!!Description!! 
Parameters:
Field 1:  !!Some kind of data!!
Field 2:  !!Some kind of data!!
Sequencing Restrictions
!!What operations must be executed before this one??!! 
Progress Notifications
!!Are any ActionData or Progress messages sent? What is sent in the ActionData messages??!! 
Error Messages and MessageBox Styles
imsgError1      MB_ABORTRETRYIGNORE 

imsgFatalError  MB_RETRYCANCEL 
Remarks
!!Additional notes!! 
#$+KixoFail Operation
	Script Opcodes	Error Codes
ixoFail is a special opcode used to catch null data in the script. This opcode is never explicitly used.
Remarks

#$+KixoNoop Operation
	Script Opcodes	Error Codes
This is a special opcode used for commenting out operations.
Parameters:
None.
Sequencing Restrictions
None.
Progress Notifications
None.
Error Messages and MessageBox Styles
None.
Remarks

#$+KixoFullRecord Operation
	Script Opcodes	Error Codes
This is a special opcode used by the script serializer to indicate the record contains data in field 0.
Parameters:
None.
Sequencing Restrictions
None.
Progress Notifications
None.
Error Messages and MessageBox Styles
None.
Remarks

#$+KixoHeader Operation
	Script Opcodes	Error Codes
The opcode marks the start of a script.
Parameters:
Field 1:  Script signature (integer)
Field 2:  Msi version (integer)
Field 3:  Timestamp (integer)
Field 4:  Language id (integer)
Field 5:  Platform (not currently used)
Field 6:  Script type. One of the following values:
 1 : Install
 2 : Rollback
 3 : Advertise
Field 7 & 8:  Script version. Used to identify incompatible script files.

Sequencing Restrictions
Must be executed before all other operations for a script.
Progress Notifications
None.
Error Messages and MessageBox Styles
None, although the ommission of this operation from a script will cause an error.
Remarks
!!Additional notes!! 
#$+KixoEnd Operation
	Script Opcodes	Error Codes
This opcode marks the end of a script.
Parameters:
Field 1:  Script checksum (integer).
Field 2:  Progress total (integer).  This value represents the total number of progress ticks to be attributed to the script execution progress bar.
Sequencing Restrictions
Must be executed after all other operations for a script.
Progress Notifications
Dispatches an ActionDone message.
Error Messages and MessageBox Styles
None. 
#$+KixoInfoMessage Operation
	Script Opcodes	Error Codes
This operation dispatches an imtInfo message with the parameters passed to it.
Parameters:
Parameters to dispatch in imtInfo message
Sequencing Restrictions
None.
Progress Notifications
Dispatches an Info message.
Error Messages and MessageBox Styles
None.
Remarks

#$+KixoActionStart Operation
	Script Opcodes	Error Codes
This operation designates the start of a new action. It sets the action name used in progress messages dispatched by subsequent operations. It also resets any state data set by previous operations.
Parameters:
Field 1:  Action name (non-localized text)
Field 2:  Action description (localized text)
Field 3:  Action data template (localized text)
Sequencing Restrictions
Must be called before the ixoProgressTotal operation for the new action.
Progress Notifications
Dispatches an ActionStart message with the following fields:
Field 1:  Action name (non-localized text)
Field 2:  Action description (localized text)
Field 3:  Action data template (localized text)
Error Messages and MessageBox Styles
None.
Remarks

#$+KixoProductRegister Operation
	Script Opcodes	Error Codes
Registers a product with the ConfigurationManager. The parameters required to register the product that are not included in the parameters below are obtained from the ixoProductInfo operation. Most of the information in this opcode is registered for the use of the Add/Remove control Panel (ARP)
Parameters:
Field 1:  UpgradeCode (UpgradeCode property)
Field 2:  Product version string (ProductVersion property)
Field 3:  Help Link (ARPHELPLINK property)
Field 4:  Help Telephone (ARPHELPTELEPHONE property)
Field 5:  Install location (ARPINSTALLLOCATION property)
Field 6:  Install source (SOURCEDIR property)
Field 7:  Publisher (Manufacturer property)
Field 8:  URL for product information(ARPURLINFOABOUT property)
Field 9:  URL for update information (ARPURLUPDATEINFO property)
Field 10:  Prevent app removal from ARP (ARPNOREMOVE property)
Field 11:  Prevent app removal from ARP (ARPNOMODIFY property)
Field 12:  Prevent app repair from ARP (ARPNOREPAIR property)
Field 13:  Authorized CDF prefix (ARPAUTHORIZEDCDFPREFIX property)
Field 14:  Comments (ARPCOMMENTS property)
Field 15:  Contact (ARPCONTACT property)
Field 16:  Readme (ARPREADME property)
Field 17:  Size (ARPSIZE property)
Field 18:  SystemComponent (ARPSYSTEMCOMPONENT property)

Sequencing Restrictions
None.
Progress Notifications
ActionData record with the following fields:
Field 1:  Product key (non-localized text?)
Error Messages and MessageBox Styles
imsgOpProdRegister, MB_ABORTRETRYIGNORE 
Remarks

#$+KixoSourceListRegisterLastUsed Operation
	Script Opcodes	Error Codes
Sets the last used source for a product.
Parameters:
Field 1:  SourceProduct - the product code for the product for which the last used source should be set
Field 2:  LastUsedSource - the path to the last used source

Sequencing Restrictions
!!What operations must be executed before this one??!! 
Progress Notifications
None.

Error Messages and MessageBox Styles
!!To be documented!!
Remarks
This op calls Conman.RegisterLastUsedSource source. 
#$+KixoSourceListPublish Operation
	Script Opcodes	Error Codes
Publishes sources for a product.
Parameters:
Field 1:  PatchCode - optional. used if we're publishing to a patch source list
Field 2:  PatchPackageName - optional. used if we're publishing a patch
Field 3:  DiskPromptTemplate - we stick the media table's disk prompt in this template to get our media prompt
Field 4:  PackagePath - relative path to package on media (e.g. "Office\", if the MSI is in the Office folder on the CD)
Field 5:  NumberOfDisks - how many disks we have
Field 6..N For each disk there should be an arg with the label and an arg with the media table prompt. Following this, for each non-media source there should be an arg with the path to the source.
parSequencing Restrictions
!!What operations must be executed before this one??!! 
Progress Notifications
None.

Error Messages and MessageBox Styles
!!To be documented!!
Remarks

#$+KixoSourceListAppend Operation
	Script Opcodes	Error Codes
Continues publishing sources for a product.
Parameters:
Field 1:  PatchCode - optional. used if we're publishing to a patch source list
Field 2:  NumberOfMedia - how many disks we have in this record
Field 3..N For each disk there should be an arg with the label and an arg with the media table prompt. Following this, for each non-media source there should be an arg with the path to the source.

Sequencing Restrictions
Must be called after the ixoSourceListPublish opcode, as this opcode will not remove existing source registration.
Progress Notifications
None.

Error Messages and MessageBox Styles
!!To be documented!!
Remarks
This opcode is a no-op when un-advertising, as ixoSourceListPublsh removes the entire sourcelist key.
#$+KixoSourceListUnpublish Operation
	Script Opcodes	Error Codes
Unpublishes sources for a product..
Parameters:
Field 1:  PatchCode - optional. used if we're unpublishing a patch source list

Sequencing Restrictions
!!What operations must be executed before this one??!! 
Progress Notifications
None.

Error Messages and MessageBox Styles
!!To be documented!!
Remarks

#$+KixoProductUnregister Operation
	Script Opcodes	Error Codes
Unregisters a product with the ConfigurationManager.
Parameters:

Sequencing Restrictions
None.
Progress Notifications
ActionData record with the following fields:
Field 1:  Product key (non-localized text?)
Error Messages and MessageBox Styles
imsgOpProdUnegister, MB_ABORTRETRYIGNORE 
Remarks

#$+KixoProductCPDisplayInfoRegister Operation
	Script Opcodes	Error Codes
registers the product to be included in the add/remove control panel list of products. This operation is used only for parent installs.
Parameters:

Sequencing Restrictions
None.
Progress Notifications
ActionData record with the following fields:
Field 1:  Product key (non-localized text?)
Error Messages and MessageBox Styles
imsgOpProdUnegister, MB_ABORTRETRYIGNORE 
Remarks

#$+KixoProductCPDisplayInfoUnregister Operation
	Script Opcodes	Error Codes
unregisters the product from the add/remove control panel list of products. This operation is used only for parent installs.
Parameters:

Sequencing Restrictions
None.
Progress Notifications
ActionData record with the following fields:
Field 1:  Product key (non-localized text?)
Error Messages and MessageBox Styles
imsgOpProdUnegister, MB_ABORTRETRYIGNORE 
Remarks

#$+KixoProductInfo Operation
	Script Opcodes	Error Codes
Contains information about the product to which the script file is related.
Parameters:
Field 1:  Product key (non-localized string)
Field 2:  Product name (localized string)
Field 3:  Product's package filename.
Field 4:  Language (integer)
Field 5:  Version (integer)
Field 6:  Assignment (integer). 1 == machine, 0 == user
Field 7:  AdminAssigned (integer). always 0 -- used by the executor

Sequencing Restrictions
This operation must immediately follow the ixoHeader operation in the script file.
Progress Notifications
None.
Error Messages and MessageBox Styles
None.
Remarks
The version given in field 5 should be generated in the following way from a X.X.X.X version: The most significant 8 bits of the integer version should equal the integer value of the first field, the next 8 bits should equal the next field and the last 16 bits should equal the third field.  The fourth field, if it exists, should be ignored.
#$+KixoUserRegister Operation
	Script Opcodes	Error Codes
Registers a user with the ConfigurationManager.
Parameters:
Field 1:  Owner (localized string?)
Field 2:  Company (localized string?)
Field 3:  ProductId (non-localized string)
Sequencing Restrictions
None.
Progress Notifications
ActionData record with the following fields:
Field 1:  Product key (non-localized text?)
Error Messages and MessageBox Styles
imsgOpUserRegister, MB_ABORTRETRYIGNORE 
Remarks

#$+KixoComponentRegister Operation
	Script Opcodes	Error Codes
Registers a component with the ConfigurationManager.
Parameters:
Field 1:  ComponentId - the GUID representing the component 
Field 2:  KeyPath - the key file or folder representing the component
Field 3:  Component State - the components INSTALLSTATE
Field 4:  ProductKey - the client of this component; if Null then the product key set by ixoProductInfo is used
Field 5:  Disk - the disk number for the component if the component is installed run from source from a removable media
Field 6:  SharedDllRefCount - boolean flag that denotes whether the component's key file is refcounted in the Shared Dll registry.
Fields 7 to N: Redirected ComponentIds - the IDs for components that should now be redirected to the one being registered

Sequencing Restrictions
!!What operations must be executed before this one??!! 
Progress Notifications
ActionData message with the following fields:
Field 1:  Product key (non-localized string)
Field 2:  ComponentId
Field 3:  KeyPath 

Error Messages and MessageBox Styles
!!To be documented!!
Remarks

#$+KixoComponentUnregister Operation
	Script Opcodes	Error Codes
Unregisters a component with the ConfigurationManager.
Parameters:
Field 1:  ComponentId - the GUID representing the component 
Field 2:  ProductKey - the client of this component; if Null then the product key set by ixoProductInfo is used

Sequencing Restrictions
!!What operations must be executed before this one??!! 
Progress Notifications
ActionData message with the following fields:
Field 1:  Product key (non-localized string)
Field 2:  ComponentId 

Error Messages and MessageBox Styles
!!To be documented!!
Remarks
!!Additional notes!! 
#$+KixoProgressTotal Operation
	Script Opcodes	Error Codes
This operation sets the total count for progress messages dispatched by subsequent operations for the current action.
Parameters:
Field 1:  Total tick count (integer)
Field 2:  Progress type. One of two values:
 0:   Separate progress and action data messages.
 1:   Use ActionData messages as progress (i.e. increment the progress bar on each ActionData message).
Field 3:  Byte Equivalent.  For each action type, the approximate number of bytes the InstallFiles action would copy in the time it takes for this action to perform one operation.  When using ActionData messages for progress, the progress bar is incremented by the Byte Equivalent value each time an ActionData message is received. Note: the Byte Equivalent value is related to the InstallFiles byte transfer rate so that the Installer can use this relationship to approximate the anticipated total time required for the entire install.
Sequencing Restrictions
Must be called after the ixoActionStart operation for the current action.
Progress Notifications
None.
Error Messages and MessageBox Styles
None.
Remarks

#$+KixoProgressTick Operation
	Script Opcodes	Error Codes
This operation performs 1 progress message operation on behalf of the current action.
Parameters:

Sequencing Restrictions

Progress Notifications
None.
Error Messages and MessageBox Styles
None.
Remarks

#$+KixoSetSourceFolder Operation
	Script Opcodes	Error Codes
This operation sets the source folder used by subsequent operations. The value set by operation is valid until the next ixoSetSourceFolder or ixoActionStart operation.
Parameters:
Field 1:  Full path of folder (localized text)

Sequencing Restrictions
Must be executed before any operations using the source folder since the last ixoActionStart operation.
Progress Notifications
None.
Error Messages and MessageBox Styles
!! what errors can be dispatched?? !!
Remarks

#$+KixoSetTargetFolder Operation
	Script Opcodes	Error Codes
This operation sets the target folder used by subsequent operations. The value set by operation is valid until the next ixoSetTargetFolder or ixoActionStart operation.
Parameters:
Field 1:  String or integer. If a string, the full path of the folder (localized text). If an integer, the CSIDL_* value corresponding to a shell folder. These values are defined in the shlobj.h file in the Win32 headers. (integer).

Sequencing Restrictions
Must be executed before any operations using the target folder since the last ixoActionStart operation.
Progress Notifications
None.
Error Messages and MessageBox Styles
!! what errors can be dispatched?? !!
Remarks

#$+KixoChangeMedia Operation
	Script Opcodes	Error Codes
Sets the media and cabinet files to use in subsequent ixoFileCopy operations.
Parameters:
Field 1:  Media volume label.  This is the label associated with the volume (as returned by the GetVolumeInformation API), and is used to ensure that the proper volume is in the drive.
Field 2:  Media prompt (localized text).  This field should represent the source disk name, as visible to the user on the printed disk label. If the source volume is a removable drive (i.e. floppy or CD), and the current disk's volume label does not match the value given in field 1, a dialog incorporating the string given in this field will be displayed, prompting the user to enter the proper disk.
Field 3:  Media cabinet. If this cabinet is located in a stream of the module, this value is the stream name. If the cabinet is a seperate file, this value is the full path to the file.
Field 4:  Bytes per tick of progress messages (integer)
Field 5:  Copier type. One of the following values:
 ictFileCopier          = 0 : copy an uncompressed file.
 ictCabinetCopier       = 1 : copy a compressed file from a cabinet.
 ictStreamCabinetCopier = 2 : copy a compressed file from a cabinet stored as a stream within the install database.
Field 6:  Full path to the install database file containing cabinet file in a stream. Not required if cabinet file isn't located in a stream, or if copying only uncompressed files. (non-localized text)
Sequencing Restrictions
None.
Progress Notifications
None.
Error Messages and MessageBox Styles
See the description of field 2 (above).
Remarks

#$+KixoSetCompanionParent Operation
	Script Opcodes	Error Codes
Signifies that the next ixoFileCopy operation involves a "companion" file, i.e. a file whose installation status is dependent on the version and language of a "parent" file.  The ixoSetCompanionParent operation specifies the full path, version, and language of the parent.  Thus, when the subsequent ixoFileCopy operation is executed, the path, version, and language of the parent file will be checked to determine whether the companion file should be installed or not.
Parameters:
Field 1:  Parent Path: absolute path to the parent file.
Field 2:  Parent Name: filename of the parent file.
Field 3:  Parent Version: version string of the parent file, as found in the Version field of the File table.
Field 4:  Parent language: language string of the parent file, as found in the Language field of the File table.

Sequencing Restrictions
None.
Progress Notifications
None.
Error Messages and MessageBox Styles
None.
#$+KixoInstallSFPCatalogFile Operation
	Script Opcodes	Error Codes
Install a system file protection catalog file
Parameters:
Field 1:  Catalog file name. 
Field 2:  Binary blob containing catalog.
Field 3:  Comma delimited list of catalogs this one depends on.
Sequencing Restrictions
Must be executed before ixoFileCopy.
Progress Notifications
ActionData record with the following fields:
Field 1:  Catalog file name
Error Messages and MessageBox Styles
!!To be documented!!
Remarks
If the catalog binary blob is empty, the specified catalog name will be deleted. This is used for rollback, and future features for uninstalling catalogs.
#$+KixoFileCopy Operation
	Script Opcodes	Error Codes
Copies a compressed file from a cabinet, or an uncompressed file from a source directory.
Parameters:
Field 1:  Source file identifier. Name of file located in the folder set by the ixoSetSourceFolder operation when copying uncompressed files, or cabinet identifier when copying compressed files (localizable). 
Field 2:  Destination file name. File will be copied to the folder set by the ixoSetTargetFolder operation (localizable). 
Field 3:  Copy attributes (integer) - bit flags, defined as follows:
  0: iffReadOnly : Set the ReadOnly bit in the destination file.
  1: iffHidden   : Set the Hidden bit in the destination file.
  2: iffSystem   : Set the System bit in the destination file.
  3: iffReserved : must be zero.
  4: iffVital    : Vital file.  If any error occurs at copy time (i.e. source file cannot   be located), the 'Ignore' button on the resulting dialog will be suppressed.
Field 4:  File size (integer)
Field 5:  Version string, as found in the Version field of the File table.
Field 6:  Language string, as found in the Language field of the File table.
Field 7:  Install mode (integer) - bit flags, defined as follows:
   0: icmRunFromSource              : File should be run from source image (i.e. don't copy even if icmInstallEnabled bit is on) -
                                      this bit allows the ixoFileCopy operation to log files that are RunFromSource, even though
                                      it won't copy them.
   1: Reserved                      : Must be zero.
   2: icmRemoveSource               : delete the source file after copying (or simply move the file if possible).
   2-15: Reserved                   : must be zero.
  16: icmInstallEnabled             : Enables install/overwrite.  No file copy will occur if this bit is clear, regardless of
                                      any other bit setting.
  17: icmOverwriteNone              : Install only if no existing file is present (never overwrite).
  18: icmOverwriteOlderVersions     : Overwrite older file versions.
  19: icmOverwriteEqualVersions     : Overwrite equal file versions.
  20: icmOverwriteDifferingVersions : Overwrite any file with a differing version.
  21: icmOverwriteCorruptedFiles    : Overwrite corrupt files (i.e. checksum failure).
  22: icmOverwriteAllFiles          : Overwrite all files, regardless of version.
Field 8:  Bytes per tick - the number of bytes to be copied between each progress message tick.
Field 9:  IsCompressed (Boolean): True if the file is compressed in a cabinet.
Field 10:  IMsiData object containing "self-relative" Win32 security descriptor.  Empty provides no security.
Field 11:  VerifyMedia: If true, and if the source file resides on removable media, verify that the source volume is present before attempting the file copy.  If source volume is not present, a dialog will prompt the user to insert the appropriate disk.
Field 12:  Vital patches: count of patches for this file that are considered "vital."
Field 12:  Total patches: total count of patches for this file.
Field 13:  Patch headers: a variable number of patch headers, one for each patch to be applied to this file. These are retrieved from the Header column of the Patch table, and used to test if a patch will be successful or not.

Sequencing Restrictions
Must be executed after ixoSetTargetFolder. When copying uncompressed files, must be executed after ixoSetSourceFolder. When copying compressed files, must be executed after ixoChangeMedia.
Progress Notifications
ActionData record with the following fields:
Field 1:  Source file name
Field 6:  File size
Field 9:  Target folder
Progress message every time a number of bytes equal to the 8th parameter is copied. The progress record contains the following fields:
Field 1:  Total number of units for progress. This value is set by the ixoProgressTotal operation.
Field 2:  Number of units (bytes) copied so far. This value is for all files copied since the last ixoActionStart operation.
Error Messages and MessageBox Styles
An error message box will be presented if the source file cannot be located in the folder set by the last  ixoSetSourceFolder operation, or if no disk is found in the drive associated with the source volume (assuming removable media).
Remarks

#$+KixoFileRemove Operation
	Script Opcodes	Error Codes
Remove a file.
Parameters:
Field 2:  File name. File is assumed to exist in the folder set by the ixoSetTargetFolder operation. (localized text?)
Sequencing Restrictions
Must be executed after ixoSetTargetFolder.
Progress Notifications
ActionData record with the following fields:
Field 1:  File name
Field 9:  Folder
Error Messages and MessageBox Styles
!!To be documented!!
Remarks
If the removal of the file leaves the folder empty, and the folder is registered with the Configuration Manager, the folder is deleted as well.
#$+KixoStreamsRemove Operation
	Script Opcodes	Error Codes

Parameters:
Field 1:  

Sequencing Restrictions

Progress Notifications
ActionData record with the following fields:
Field 1: 
Error Messages and MessageBox Styles
!!To be documented!!
Remarks

#$+KixoStreamAdd Operation
	Script Opcodes	Error Codes

Parameters:
Field 1:  Full path to the storage file
Field 2:  Stream name to create/replace
Field 3:  Stream data to place.
Sequencing Restrictions

Progress Notifications
ActionData record with the following fields:
Field 1: 
Error Messages and MessageBox Styles
!!To be documented!!
Remarks

#$+KixoDatabaseCopy Operation
	Script Opcodes	Error Codes
Caches the product database in %WINDOWS%
Parameters:
Field 1:  Full path to the database
Field 2:  Product code
Field 3:  Cabinet streams. This is a semicolon-delimited list of streams that should be dropped from the database when it is cached

Sequencing Restrictions

Progress Notifications
ActionData record with the following fields:
Field 1: 
Error Messages and MessageBox Styles
!!To be documented!!
Remarks

#$+KixoDatabasePatch Operation
	Script Opcodes	Error Codes
Patchs the product database in %WINDOWS%
Parameters:
Field 1:  Full path to the database
Field 2-n:  Transform to be applied and persisted to database package. The transform is stored as binary data. The transforms are applied in the order they are listed in the parameter list.

Sequencing Restrictions
None.
Progress Notifications
None.
Error Messages and MessageBox Styles
!!To be documented!!
Remarks

#$+KixoFileUndoRebootReplace Operation
	Script Opcodes	Error Codes
This operation "un-schedules" a file for deletion or rename on reboot. When a file is in use and an attempt is made to delete or copy over that file, the operation is scheduled to occur on reboot. This operation is written to the rollback script so that if the installation is rolled back before a reboot occurs, the operation will not take place.  This operation should only exist in a rollback script.
Parameters:
Field 1:  Full path of file to be deleted or renamed.
Field 2:  Null if file is to be deleted, or full path of file to rename original file to.
Field 3:  Type of operation. 0 for Win9X, 1 for WinNT. On Win9X, reboot operation are written to %windows%\wininit.ini. On WinNT, they are written to the registry value HKLM\SYSTEM\Control\CurrentControlSet\Session Manager\[PendingFileRenameOperations].
Sequencing Restrictions
None.
Progress Notifications
None.
Error Messages and MessageBox Styles

Remarks

#$+KixoFolderCreate Operation
	Script Opcodes	Error Codes
Creates a folder. If the folder does not already exist, it is registered with the ConfigurationManager using the RegisterFolder method.
Parameters:
Field 1:  Folder. Full path of the folder to be created. (localized text)
Field 2:  Foreign. True if this is a foreign (i.e. explicitly authored) folder, false otherwise.
Field 3:  IMsiData object containing "self-relative" Win32 security descriptor.  Empty provides no security. 
Sequencing Restrictions
None.
Progress Notifications
ActionData record with the following fields:
Field 1:  Folder 

Error Messages and MessageBox Styles
!!To be documented!!
Remarks

#$+KixoFolderRemove Operation
	Script Opcodes	Error Codes
Removes a folder if it is empty. If the folder is removed, it is unregistered with the ConfigurationManager using the UnregisterFolder method.
Parameters:
Field 1:  Folder. Full path of the folder to be created. (localized text)
Field 2:  Foreign. True if this is a foreign (i.e. explicitly authored) folder, false otherwise.
Sequencing Restrictions
None.
Progress Notifications
ActionData record with the following fields:
Field 1:  Folder
Error Messages and MessageBox Styles
!! to be documented !!
Remarks

#$+KixoRegAllocateSpace Operation
	Script Opcodes	Error Codes
This operation sets the free space available in the registry.
Parameters:
Field 1:  Space: (integer) the required free registry space in KB 

Sequencing Restrictions
None.
Progress Notifications
None.
Error Messages and MessageBox Styles
None.
Remarks
This operation is a noop on Win9X.
#$+KixoRegOpenKey Operation
	Script Opcodes	Error Codes
This operation sets the registry key to use in subsequent operations using registry keys.
Parameters:
Field 1:  Root key: (integer)
0, rrkClassesRoot:  HKEY_CLASSES_ROOT
1, rrkCurrentUser:  HKEY_CURRENT_USER
2, rrkLocalMachine: HKEY_LOCAL_MACHINE
3, rrkUsers:        HKEY_USERS
Field 2:  Registry key (non-localized text?)
Field 3:  IMsiData object containing "self-relative" Win32 security descriptor.  Empty provides no security.
Sequencing Restrictions
None.
Progress Notifications
None.
Error Messages and MessageBox Styles
None.
Remarks
This operation only sets the value to use in future operations. It doesn't attempt to open or read the specified registry key.
#$+KixoRegAddValue Operation
	Script Opcodes	Error Codes
Write a value to the registry key opened with ixoRegOpenKey.
Parameters:
Field 1:  Value name (non-localized text?)
Field 2:  Value data (localized text?)
The value data is a string. The following registry types are supported - 
REG_DWORD:  The string represents a decimal number and is prefixed by # . 
REG_BINARY:  The string represents a binary sequence and is prefixed by #x . 
REG_EXPAND_SZ:  The string represents an expandable string and is prefixed by #% . 
REG__SZ:  The string represents the string to be written. If the string value begins with # then it is prefixed by another # . 

Sequencing Restrictions
Must be executed after ixoRegOpenKey.
Progress Notifications
ActionData record with the following fields:
Field 1:  Registry key (non-localized text?)
Field 2:  Value name (non-localized text?)
Field 3:  Value data (localized text?)
Error Messages and MessageBox Styles
idbgOpOutOfSequence, MB_OK  
Remarks

#$+KixoRegRemoveValue Operation
	Script Opcodes	Error Codes
Deletes a value from the registry key opened with ixoRegOpenKey.
Parameters:
Field 1:  Value name (non-localized text?)
Field 2:  Optional value data (localized text?)

Sequencing Restrictions
Must be executed after ixoRegOpenKey.
Progress Notifications
ActionData record with the following fields:
Field 1:  Registry key (non-localized text?)
Field 2:  Value name (non-localized text?)
Error Messages and MessageBox Styles

Remarks

#$+KixoRegRemoveKey Operation
	Script Opcodes	Error Codes
Deletes an key and all its values/ subkeys from the registry.
Parameters:
Field 1:  Registry key (non-localized text?)
Sequencing Restrictions
Must be executed after ixoRegOpenKey.
Progress Notifications
ActionData record with the following fields:
Field 1:  Registry key (non-localized text?)

Error Messages and MessageBox Styles
idbgOpOutOfSequence, MB_OK  
Remarks

#$+KixoRegCreateKey Operation
	Script Opcodes	Error Codes
Creates a key, if absent.
Parameters:

Sequencing Restrictions
Must be executed after ixoRegOpenKey.
Progress Notifications
ActionData record with the following fields:
Field 1:  Registry key (non-localized text?)

Error Messages and MessageBox Styles
idbgOpOutOfSequence, MB_OK  
Remarks

#$+KixoRegSelfReg Operation
	Script Opcodes	Error Codes
Calls the self registration function of a module.
Parameters:
Field 1:  Module file name. File is assumed to exist in the folder set by the ixoSetTargetFolder operation. (localized text?)

Sequencing Restrictions
Must be executed after ixoSetTargetFolder.
Progress Notifications
ActionData record with the following fields:
Field 1:  Module name (localized text?)
Field 2:  Folder containing module (localized text?)
Error Messages and MessageBox Styles
idbgOpOutOfSequence,  MB_OK  
imsgSelfRegModulesFailed, MB_OK  
Remarks

#$+KixoRegSelfUnreg Operation
	Script Opcodes	Error Codes
Calls the self unregistration function of a module.
Parameters:
Field 1:  Module file name. File is assumed to exist in the folder set by the ixoSetTargetFolder operation. (localized text?)

Sequencing Restrictions
Must be executed after ixoSetTargetFolder.
Progress Notifications
ActionData record with the following fields:
Field 1:  Module name (localized text?)
Field 2:  Folder containing module (localized text?)
Error Messages and MessageBox Styles
idbgOpOutOfSequence,  MB_OK  
imsgSelfUnregModulesFailed, MB_OK  
Remarks

#$+KixoIniWriteRemoveValue Operation
	Script Opcodes	Error Codes
Writes or removes a value from a .INI file.
Parameters:
Field 1:  .INI section to modify (non-localized text)
Field 2:  .INI key to modify (non-localized text)
Field 3:  Value to write. This value is ignored when the Action parameter is iifIniRemoveLine.
Field 4:  Action to take. One of the following values:
 iifIniAddLine    =0 - Creates/Updates .INI entry
 iifIniCreateLine =1 - Creates .INI entry only if absent
 iifIniRemoveLine =2 - Deletes .INI entry
 iifIniAddTag     =3 - Creates/ Appends a new comma separated tag(value) to a .INI entry
 iifIniRemoveTag  =4 - Deletes a tag from a .INI entry
Sequencing Restrictions
Must be executed after the ixoIniFilePath operation.
Progress Notifications
ActionData record with the following fields:
Field 1:  .INI file name
Field 2:  .INI section
Field 3:  .INI key
Field 4:  Value
Error Messages and MessageBox Styles
!!To be documented!!
Remarks

#$+KixoIniFilePath Operation
	Script Opcodes	Error Codes
Specifies the .INI file to modify in subsequent ixoIniWriteRemoveValue operations.
Parameters:
Field 1:  .INI file name.
Field 2:  Folder containing .INI file.  This value may be left NULL to use the Windows directory.
Sequencing Restrictions
None.
Progress Notifications
None.
Error Messages and MessageBox Styles
!!To be documented!!
Remarks

#$+KixoPatchApply Operation
	Script Opcodes	Error Codes
Applies a patch to an existing file.
Parameters:
Field 1:  Identifier for patch in the cabinet file set by ixoChangeMedia.
Field 2:  Name of target file to patch. Either a full path or the name of a file in the folder set by ixoSetTargetFolder.
Field 3:  Size of patch file.
Field 4:  Size of target file.
Field 5:  Bytes per tick of progress messages.
Field 6:  Boolean, always set to 1.

Sequencing Restrictions
Must be after the ixoFileCopy operation for the target file.
Progress Notifications
Same as ixoFileCopy.
Error Messages and MessageBox Styles

Remarks

#$+KixoPatchRegister Operation
	Script Opcodes	Error Codes
Registers a patch package with a product.  This registration is used during subsequent configurations of the product to find the patch package.
Parameters:
Field 1:  GUID representing this particular patch package.
Field 2:  Name of patch package.
Field 3:  Source list for patch package.  Same format as the SOURCELIST property.
Field 4:  List of transforms from the patch package that are actually used for this product. Same format as the TRANSFORMS property.

Sequencing Restrictions
None.
Progress Notifications
None.
Error Messages and MessageBox Styles

Remarks

#$+KixoPatchUnregister Operation
	Script Opcodes	Error Codes
Unregisters a patch package.
Parameters:
Field 1:  GUID representing this particular patch package.

Sequencing Restrictions
None.
Progress Notifications
None.
Error Messages and MessageBox Styles

Remarks

#$+KixoPatchCache Operation
	Script Opcodes	Error Codes
Copies a patch package to the %windows%directory for future use during maintenance mode installs of the patched product.
Parameters:
Field 1:  GUID representing this particular patch package.
Field 2:  Path to the patch package to cache.

Sequencing Restrictions
None.
Progress Notifications
None.
Error Messages and MessageBox Styles

Remarks

#$+KixoDialogInfo Operation
	Script Opcodes	Error Codes
This operation dispatches an imtCommonData message with the parameters passed to it.
Parameters:
Parameters to dispatch in imtCommonData message
Sequencing Restrictions
This operation should be executed before any operations sending messages to the UI.
Progress Notifications
None.
Error Messages and MessageBox Styles
None.
Remarks

#$+KixoRollbackInfo Operation
	Script Opcodes	Error Codes
Passes rollback information to the script executor.
Parameters:
Field 1:  Reserved
Field 2:  Rollback action title. Passed in field 1 of ActionStart message when performing rollback.
Field 3:  Rollback action description. Passed in field 2 of ActionStart message when performing rollback.
Field 4:  Rollback action data template. Passed in field 3 of ActionStart message when performing rollback.
Field 5:  Rollback cleanup action title. Passed in field 1 of ActionStart message when removing backup files.
Field 6:  Rollback cleanup action description. Passed in field 2 of ActionStart message when removing backup files.
Field 7:  Rollback cleanup action data template. Passed in field 3 of ActionStart message when removing backup files.

Sequencing Restrictions
None.
Progress Notifications
None.
Error Messages and MessageBox Styles
None.
Remarks

#$+KixoDisableRollback Operation
	Script Opcodes	Error Codes
This operation disables rollback by stopping rollback processing for the script and marking the current rollback script to not run.
Parameters:
None.
Sequencing Restrictions
None.
Progress Notifications
None.
Error Messages and MessageBox Styles
None.
Remarks

#$+KUpdateEstimatedSize Operation
	Script Opcodes	Error Codes
This operation updates the EstimatedSize value under the Product's Uninstall key.  This value represents the estimate amount of disk space, in KB, that the application is currently consuming on the user's system.
Parameters:
None.
Sequencing Restrictions
None.
Progress Notifications
None.
Error Messages and MessageBox Styles
None.
Remarks

#$+KInstallProtectedFiles Operation
	Script Opcodes	Error Codes
This operation scans the internal "file status" cache for any files that were scheduled for installation by InstallFiles, MoveFiles, etc. yet couldn't be installed because they are on the Win2000 System File Protection list.  InstallProtectedFiles then calls the Win2000 API SfcInstallProtectedFiles to actually install these files.
Parameters:
None.
Sequencing Restrictions
None.
Progress Notifications
None.
Error Messages and MessageBox Styles
None.
Remarks

#$+KixoRegAddRunOnceEntry Operation
	Script Opcodes	Error Codes
This operation writes a command to the per-machine RunOnce registry key.
Parameters:
Field 1:  Name of the RunOnce value.
Field 1:  Command-line to be run at next logon.

Sequencing Restrictions
None.
Progress Notifications
None.
Error Messages and MessageBox Styles
None.
Remarks

#$+KixoFontRegister Operation
	Script Opcodes	Error Codes
Registers a font with the system.
Parameters:
Field 1:  Font title (localized text?)
Field 2:  Font file name. File is assumed to exist in the folder set by the ixoSetTargetFolder operation, or in the default font folder if ixoSetTargetFolder has not been executed since the last ixoActionStart operation. (localized text?)
Sequencing Restrictions

Progress Notifications
ActionData record with the following field:
Field 1:  Font title (localized text?)
Error Messages and MessageBox Styles
imsgOpRegFont, MB_OK  
Remarks

#$+KixoFontUnregister Operation
	Script Opcodes	Error Codes
Unregisters a font with the system.
Parameters:
Field 1:  Font title (localized text?)
Field 2:  Font file name. Not used by this operation.
Sequencing Restrictions
None.
Progress Notifications
ActionData record with the following fields:
Field 1:  Font title (localized text?)
Error Messages and MessageBox Styles
idbgOpOutOfSequence,  MB_OK  
imsgOpUnregFont, MB_OK  
Remarks

#$+KixoResourceUpdate Operation
	Script Opcodes	Error Codes
Obsolete.  No longer supported.
#$+KixoFileBindImage Operation
	Script Opcodes	Error Codes
Binds and executable image.
Parameters:
Field 1:  File name. File is assumed to exist in the folder set by the ixoSetTargetFolder operation. (localized text?)
Field 2:  Paths. A list of ; delimited paths that represent the paths to be searched for the import DLLS.
Sequencing Restrictions
Must be executed after ixoSetTargetFolder.
Progress Notifications
ActionData record with the following fields:
Field 1:  File name (localized text?)
Field 2:  Folder containing file (localized text?)
Error Messages and MessageBox Styles
idbgOpOutOfSequence,  MB_OK  
!! Others to be documented !!
Remarks

#$+KixoComponentConfigure Operation
	Script Opcodes	Error Codes
Not yet implemented. 
Parameters:
!!To be documented!!
Sequencing Restrictions
!!What operations must be executed before this one??!! 
Progress Notifications
!!Are any ActionData or Progress messages sent? What is sent in the ActionData messages??!! 
Error Messages and MessageBox Styles
!! to be documented !!
Remarks
!!Additional notes!! 
#$+KixoSummaryInfoUpdate Operation
	Script Opcodes	Error Codes
This operation updates the Summary Information Stream of the Msi package. This operation is normally used during a network install.
Parameters:
Field 1:  Package. Full path to the .msi package.
Field 2:  Last update. This value is used to update the Last Saved Time/Date Summary Property. Not currently set.
Field 3:  Last author. UserName of user performing install. Used to update the Last Saved By Summary Property.
Field 4:  Install date. The time the network image was created, usually the current date and time. This is an integer in MsiDate format. This value is used to update the Last Printed Summary Property.
Field 5:  Source type. Integer value specifying the source type of the image. Used to update the MSI Source Type Summary Property.

Sequencing Restrictions
Must be executed after the Msi package has been copied to the network image.
Progress Notifications
None.
Error Messages and MessageBox Styles
!! to be documented !!
Remarks

#$+KixoReserved6 Operation
	Script Opcodes	Error Codes
Reserved for future use.
#$+KixoPackageCodePublish Operation
	Script Opcodes	Error Codes
Publishes the package code. Used by patching/upgrades to republish the package code when the package changes.
Parameters:
This operation takes 1 argument.
Field 1:  Package key. The package GUID.
...
...

Sequencing Restrictions
Must be executed after ixoProductInfo.
Progress Notifications
ActionData record with the following fields:
Field 1:  Product key

Error Messages and MessageBox Styles

Remarks

#$+KixoProductPublishUpdate Operation
	Script Opcodes	Error Codes
Re-publishes the product name and version.  Used during QFE-style patches and upgrades.
Parameters:
This operation takes 1 argument.
None.
Sequencing Restrictions
Must be executed after ixoProductInfo.
Progress Notifications
None.
Error Messages and MessageBox Styles

Remarks

#$+KixoUpgradeCodePublish Operation
	Script Opcodes	Error Codes
Publishes the product code under the appropriate Upgrade Code key.
Parameters:
This operation takes 1 argument.
Field 1:  Upgrade code. The upgrade code GUID.
...
...

Sequencing Restrictions
Must be executed after ixoProductInfo.
Progress Notifications
None.
Error Messages and MessageBox Styles

Remarks

#$+KixoUpgradeCodeUnpublish Operation
	Script Opcodes	Error Codes
Unpublishes the product code under the appropriate Upgrade Code key.
Parameters:
This operation takes 1 argument.
Field 1:  Upgrade code. The upgrade code GUID.
...
...

Sequencing Restrictions
Must be executed after ixoProductInfo.
Progress Notifications
None.
Error Messages and MessageBox Styles

Remarks

#$+KixoProductPublish Operation
	Script Opcodes	Error Codes
Publishes the product information with the configuration manager.
Parameters:
This operation takes 1 or more variable number of arguments.
Field 1:  Package key. The package GUID.
Field 2:  Transform name 1. The transform name.
Field 3:  Transform data 1. The transform stream.
Field 4:  Transform name 2. The transform name.
Field 5:  Transform data 2. The transform stream.
...
...

Sequencing Restrictions
Must be executed after ixoProductInfo.
Progress Notifications
ActionData record with the following fields:
Field 1:  Product key

Error Messages and MessageBox Styles

Remarks
The transforms are cached in the %USERPROFILE%folder.
#$+KixoProductUnpublish Operation
	Script Opcodes	Error Codes
Removes the published product information from the configuration manager.
Parameters:
This operation takes 1 or more variable number of arguments.
Field 1:  Package key. The package GUID.
Field 2:  Transform name 1. The transform name.
Field 3:  Transform data 1. The transform stream.
Field 4:  Transform name 2. The transform name.
Field 5:  Transform data 2. The transform stream.
...
...

Sequencing Restrictions
Must be executed after ixoProductInfo.
Progress Notifications
ActionData record with the following fields:
Field 1:  Product key

Error Messages and MessageBox Styles

Remarks
The transforms cached in the %USERPROFILE%folder are removed.
#$+KixoProductPublishClient Operation
	Script Opcodes	Error Codes
registers the client for the product.
Parameters:
Field 1:  Parent product key.
Field 2:  Relative child package path.
Field 3:  The child disk id.

Sequencing Restrictions
Must be executed after ixoProductInfo.
Progress Notifications
ActionData record with the following fields:
Field 1:  Product key

Error Messages and MessageBox Styles

Remarks

#$+KixoProductUnpublishClient Operation
	Script Opcodes	Error Codes
unregisters the client for the product..
Parameters:
Field 1:  Parent product key.
Field 2:  Relative child package path.
Field 3:  The child disk id.

Sequencing Restrictions
Must be executed after ixoProductInfo.
Progress Notifications
ActionData record with the following fields:
Field 1:  Product key

Error Messages and MessageBox Styles

Remarks

#$+KixoAdvtFlagsUpdate Operation
	Script Opcodes	Error Codes
Publishes the Advertisement flags for the product under the appropriate Product Code key.
Parameters:
This operation takes 1 argument.
Field 1:  Flags. The advertisement flags - records whether the OLE data, Qualified Components data and the Shortcuts have been created.
...
...

Sequencing Restrictions
Must be executed after ixoProductInfo.
Progress Notifications
None.
Error Messages and MessageBox Styles

Remarks

#$+KixoFeaturePublish Operation
	Script Opcodes	Error Codes
Publishes the Feature composition (the constituent components) with the configuration manager.
Parameters:
Field 1:  FeatureID. The feature key.
 Field 2:  FeatureID (parent). Optional parent of the feature.
 Field 3:  Absent. Set to 1 if the feature, being published, has been set to the Absent state.
Field 4:  ComponenID. The component ID of the first component of the feature.
Field 5:  ComponenID. The component ID of the second component of the feature.
...
...
...
NOTE: This is a variable length record operation, the size depending on the number of components of the feature.

Sequencing Restrictions
Must be executed after ixoProductInfo.
Progress Notifications
ActionData record with the following fields:
Field 1:  Product key
Field 2:  Feature key

Error Messages and MessageBox Styles

Remarks
For features that are selected to be absent, the component list begins with the special character '~' as Field 3. This is a Beta1 implementation that is up for revision in Beta2.
#$+KixoFeatureUnpublish Operation
	Script Opcodes	Error Codes
Removes the published Feature composition (the constituent components) from the configuration manager.
Parameters:
Field 1:  FeatureID. The feature key.
 Field 2:  FeatureID (parent). Optional parent of the feature.
 Field 3:  Absent. Set to 1 if the feature, being published, has been set to the Absent state.
Field 4:  ComponenID. The component ID of the first component of the feature.
Field 5:  ComponenID. The component ID of the second component of the feature.
...
...
...
NOTE: This is a variable length record operation, the size depending on the number of components of the feature.

Sequencing Restrictions
Must be executed after ixoProductInfo.
Progress Notifications
ActionData record with the following fields:
Field 1:  Product key
Field 2:  Feature key

Error Messages and MessageBox Styles

Remarks

#$+KixoComponentPublish Operation
	Script Opcodes	Error Codes
Publishes the component factory information (the darwin descriptor that provides the component) with the configuration manager. This is typically used for cross-product component usage.
Parameters:
Field 1:  Feature. The feature to which the component to be published belongs to.
Field 2:  Component. The component id (from the Component Table) of the component.
Field 3:  ComponentId. The component id GUID (from the PublishComponent Table) under which the component is published.
Field 4:  Qualifier. Optional. The Qualifier string that further defines the component (in addition to the ComponentId).
Field 5:  AppData. Additional localizable data to be associated with the component.

Sequencing Restrictions
Must be executed after ixoProductInfo.
Progress Notifications
ActionData record with the following fields:
Field 1:  Product key
Field 2:  Component ID

Error Messages and MessageBox Styles

Remarks

#$+KixoComponentUnpublish Operation
	Script Opcodes	Error Codes
Removes the published component information from the configuration manager.
Parameters:
Field 1:  Feature. The feature to which the component to be published belongs to.
Field 2:  Component. The component id (from the Component Table) of the component.
Field 3:  ComponentId. The component id GUID (from the PublishComponent Table) under which the component is published.
Field 4:  Qualifier. Optional. The Qualifier string that further defines the component (in addition to the ComponentId).
Field 5:  AppData. Additional localizable data to be associated with the component.

Sequencing Restrictions
Must be executed after ixoProductInfo.
Progress Notifications
ActionData record with the following fields:
Field 1:  Product key
Field 2:  Component ID

Error Messages and MessageBox Styles

Remarks

#$+KixoIconCreate Operation
	Script Opcodes	Error Codes
Creates an icon file on the system to be used for advertised extensions and shortcuts. The default location of the icon is <CSIDL_APPDATA Shell Folder>\Microsoft\Installer for user assigned apps on Win NT and <Windows Directory>\Installer on Win95 or for machine assigned apps on Win NT. This may however be overridden by the MsiProcessAdvertiseScript API.
Parameters:
Field 1:  Icon Name. The name of the icon file to be created including the extension.
Field 2:  Icon Data. The stream for the data for the icon file.

Sequencing Restrictions

Progress Notifications
ActionData record with the following fields:
Field 1:  Icon name

Error Messages and MessageBox Styles

Remarks

#$+KixoIconRemove Operation
	Script Opcodes	Error Codes
Removes an icon file on the system that was used for advertised extensions and shortcuts. The default location of the icon is <CSIDL_APPDATA Shell Folder>\Microsoft\Installer for user assigned apps on Win NT and <Windows Directory>\Installer on Win95 or for machine assigned apps on Win NT. This may however be overridden by the MsiProcessAdvertiseScript API.
Parameters:
Field 1:  Icon Name. The name of the icon file created including the extension.
Field 2:  Icon Data. The stream for the data for the icon file. This field is unused.

Sequencing Restrictions

Progress Notifications
ActionData record with the following fields:
Field 1:  Icon name

Error Messages and MessageBox Styles

Remarks

#$+KixoShortcutCreate Operation
	Script Opcodes	Error Codes
Creates a shortcut.
Parameters:
Field 1:  Name. The shortcut name. 
Field 2:  Feature. The feature to which the shortcut belongs to. Is null for non-advertisable shortcuts. 
Field 3:  Component. The component id (from the Component Table) of the component whose key file is the shortcut target. Is null for non-advertisable shortcuts. 
Field 4:  FileName. The (key) file of the component for advertisable shortcuts. The target for non-advertisable shortcuts. 
Field 5:  Arguments. The shortcut arguments. 
Field 6:  WorkingDir. The working directory. 
Field 7:  Icon. Icon file. For non-advertised shortcuts this is optionally a full file path. For advertised shortcuts this has to be the name of the file created using the ixoIconCreate operation.
Field 8:  IconIndex. The icon index (integer)
Field 9:  Hotkey. See help on Shortcut table for more details.
Field 10:  Show command. See help on Shortcut table for more details

Sequencing Restrictions
Must be exectued after ixoSetTargetFolder operation. In the advertise mode must be executed after the ixoIconCreate operation.
Progress Notifications
ActionData record with the following fields:
Field 1:  Shortcut name

Error Messages and MessageBox Styles
imsgOpShortcutCreate, MB_OK  
Remarks

#$+KixoShortcutRemove Operation
	Script Opcodes	Error Codes
Removes a shortcut
Parameters:
Field 1:  Shortcut name

Sequencing Restrictions
Must be exectued after the ixoSetTargetFolder operation.
Progress Notifications
ActionData record with the following fields:
Field 1:  Shortcut name

Error Messages and MessageBox Styles
imsgOpShortcutRemove, MB_OK  
Remarks

#$+KixoRegAppIdInfoRegister Operation
	Script Opcodes	Error Codes
Registers class info with the registry.
Parameters:
Field 1:  UNFINISHED
Sequencing Restrictions

Progress Notifications
ActionData record with the following fields:
Field 1:  UNFINISHED

Error Messages and MessageBox Styles

Remarks
On 64-bit operating systems will write info into the 32-bit OLE/COM hive.
#$+KixoRegAppIdInfoRegister64 Operation
	Script Opcodes	Error Codes
Registers class info with the registry for 64-bit components.  Behaviour is identic with ixoRegAppIdInfoRegister.
Remarks
On 64-bit operating systems will write info into the 64-bit OLE/COM hive.
#$+KixoRegAppIdInfoUnregister Operation
	Script Opcodes	Error Codes
Unregisters class info with the registry.
Parameters:
Field 1:  UNFINISHED
Sequencing Restrictions

Progress Notifications
ActionData record with the following fields:
Field 1:  UNFINISHED

Error Messages and MessageBox Styles

Remarks
On 64-bit operating systems will remove info from the 32-bit OLE/COM hive.
#$+KixoRegAppIdInfoUnregister64 Operation
	Script Opcodes	Error Codes
Unregisters class info with the registry for 64-bit components.  Behaviour is identic with ixoRegAppIdInfoUnregister.
Remarks
On 64-bit operating systems will remove info from the 64-bit OLE/COM hive.
#$+KixoRegClassInfoRegister Operation
	Script Opcodes	Error Codes
Registers class info with the registry.
Parameters:
Field 1:  Feature. The class server feature.
Field 2:  Component. The component id (from the Component Table) of the component whose key file is the class server.
Field 3:  FileName. The (key) file of the component.
Field 4:  ClsId. The GUID string of the class.
Field 5:  ProgId. The ProgID string of the class.
Field 6:  VIProgId. The version independant ProgID string of the class.optional.
Field 7:  Description. The Description string. 
Field 8:  Context. The class context. One of 
LocalServer
LocalServer32
InprocServer
InprocServer32
InprocHandler
InprocHandler32
Field 9:  Insertable. Whether the class supports the Insertable key.
Field 10:  AppID. <TBD>
Field 11:  FileTypeMask. semicolon delimited file type masks for the class server.
Field 12:  Icon. The name of the icon file created using the ixoIconCreate operation.
Field 13:  IconIndex.The index of the icon within the icon file.
Field 14:  DefInprocHandler. The default InprocHandler.Relevant only if the class context is LocalServer or LocalServer32. It is either a number or is the name of a "system" file. If it is a number is is interpreted as - 
1  - Use the system default for the 16 bit InprocHandler (ole2.dll used for InprocHandler).
2  - Use the system default for the 32 bit InprocHandler (ole32.dll used for InprocHandler32).
3  - Use the system default for both the 16 bit and 32 bit InprocHandler (ole2.dll used for InprocHandler, ole32.dll used for InprocHandler32).
If it is a name it is interpreted as the file to be used as the 32 bit InprocHandler (used for InprocHandler32).
Field 15:  Argument. The argument to be used with the class server. Relevant only only if the class context is LocalServer or LocalServer32.

Sequencing Restrictions

Progress Notifications
ActionData record with the following fields:
Field 1:  CLSID

Error Messages and MessageBox Styles

Remarks
On 64-bit operating systems will write info into the 32-bit OLE/COM hive.
#$+KixoRegClassInfoRegister64 Operation
	Script Opcodes	Error Codes
Registers class info with the registry.  Behaviour is identic with ixoRegClassInfoRegister.
Remarks
On 64-bit operating systems will write info into the 64-bit OLE/COM hive.
#$+KixoRegClassInfoUnregister Operation
	Script Opcodes	Error Codes
Unregisters class info with the registry.
Parameters:
Field 1:  Feature. The class server feature.
Field 2:  Component. The component id (from the Component Table) of the component whose key file is the class server.
Field 3:  FileName. The (key) file of the component.
Field 4:  ClsId. The GUID string of the class.
Field 5:  ProgId. The ProgID string of the class.
Field 6:  VIProgId. The version independant ProgID string of the class.optional.
Field 7:  Description. The Description string. 
Field 8:  Context. the class context. One of 
LocalServer
LocalServer32
InprocServer
InprocServer32
InprocHandler
InprocHandler32
Field 9:  Insertable. Whether the class supports the Insertable key.
Field 10:  AppID. <TBD>
Field 11:  FileTypeMask. semicolon delimited file type masks for the class server.
Field 12:  Icon. The name of the icon file created using the ixoIconCreate operation.
Field 13:  IconIndex.The index of the icon within the icon file.
Field 14:  DefInprocHandler. The default InprocHandler.Relevant only if the class context is LocalServer or LocalServer32. It is either a number or is the name of a "system" file. If it is a number is is interpreted as - 
1  - Use the system default for the 16 bit InprocHandler (ole2.dll used for InprocHandler).
2  - Use the system default for the 32 bit InprocHandler (ole32.dll used for InprocHandler32).
3  - Use the system default for both the 16 bit and 32 bit InprocHandler (ole2.dll used for InprocHandler, ole32.dll used for InprocHandler32).
If it is a name it is interpreted as the file to be used as the 32 bit InprocHandler (used for InprocHandler32).
Field 15:  Argument. The argument to be used with the class server. Relevant only only if the class context is LocalServer or LocalServer32.

Sequencing Restrictions

Progress Notifications

Sequencing Restrictions

Progress Notifications
ActionData record with the following fields:
Field 1:  CLSID

Error Messages and MessageBox Styles

Remarks
On 64-bit operating systems will remove info from the 32-bit OLE/COM hive.
#$+KixoRegClassInfoUnregister64 Operation
	Script Opcodes	Error Codes
Unregisters class info with the registry.  Behaviour is identic with ixoRegClassInfoUnregister.
Remarks
On 64-bit operating systems will remove info from the 64-bit OLE/COM hive.
#$+KixoRegMIMEInfoRegister Operation
	Script Opcodes	Error Codes
Registers the MIME info with the registry.
Parameters:
Field 1:  ContentType. The Content type string.
Field 2:  Extension. The extension string (w/o the '.').
Field 3:  CLSID. The optional GUID string of the class.

Sequencing Restrictions

Progress Notifications
ActionData record with the following fields:
Field 1:  ContentType
Field 2:  Extension

Error Messages and MessageBox Styles

Remarks
On 64-bit operating systems will write info into the 32-bit OLE/COM hive.
#$+KixoRegMIMEInfoRegister64 Operation
	Script Opcodes	Error Codes
Registers the MIME info with the registry.  Behaviour is identic with ixoRegMIMEInfoRegister.
Remarks
On 64-bit operating systems will write info into the 64-bit OLE/COM hive.
#$+KixoRegMIMEInfoUnregister Operation
	Script Opcodes	Error Codes
Unregisters the MIME info with the registry.
Parameters:
Field 1:  ContentType. The Content type string.
Field 2:  Extension. The extension string (w/o the '.').
Field 3:  CLSID. The optional GUID string of the class.

Sequencing Restrictions

Progress Notifications
ActionData record with the following fields:
Field 1:  ContentType
Field 2:  Extension

Error Messages and MessageBox Styles

Remarks
On 64-bit operating systems will remove info from the 32-bit OLE/COM hive.
#$+KixoRegMIMEInfoUnregister64 Operation
	Script Opcodes	Error Codes
Unregisters the MIME info with the registry.  Behaviour is identic with ixoRegMIMEInfoUnregister.
Remarks
On 64-bit operating systems will remove info from the 64-bit OLE/COM hive.
#$+KixoRegProgIdInfoRegister Operation
	Script Opcodes	Error Codes
Registers the ProgId info with the registry.
Parameters:
Field 1:  ProgId. The Program Identifier string.
Field 2:  ClsId. The optional GUID string of the class.
Field 3:  Extension. The extension associated with the progid.
Field 4:  Description. The ProgId Description.
Field 5:  Icon. The icon associated with the ProgId.
Field 6:  IconIndex. The icon index.
Field 7:  VIProgId. The optional version independant prog id.
Field 8:  VIProgIdDescription. The description for the version independant prog id.
Field 9:  Insertable. Set to 1 if the corr. object is insertable.

Sequencing Restrictions

Progress Notifications
ActionData record with the following fields:
Field 1:  ProgId

Error Messages and MessageBox Styles

Remarks
On 64-bit operating systems will write info into the 32-bit OLE/COM hive.
#$+KixoRegProgIdInfoRegister64 Operation
	Script Opcodes	Error Codes
Registers the ProgId info with the registry.  Behaviour is identic with ixoRegProgIdInfoRegister.
Remarks
On 64-bit operating systems will write info into the 64-bit OLE/COM hive.
#$+KixoRegProgIdInfoUnregister Operation
	Script Opcodes	Error Codes
Unregisters the ProgId info with the registry.
Parameters:
Field 1:  ProgId. The Program Identifier string.
Field 2:  ClsId. The optional GUID string of the class.
Field 3:  Extension. The extension associated with the progid.
Field 4:  Description. The ProgId Description.
Field 5:  Icon. The icon associated with the ProgId.
Field 6:  IconIndex. The icon index.
Field 7:  VIProgId. The optional version independant prog id.
Field 8:  VIProgIdDescription. The description for the version independant prog id.
Field 9:  Insertable. Set to 1 if the corr. object is insertable.

Sequencing Restrictions

Progress Notifications
ActionData record with the following fields:
Field 1:  ProgId

Error Messages and MessageBox Styles

Remarks
On 64-bit operating systems will remove info from the 32-bit OLE/COM hive.
#$+KixoRegProgIdInfoUnregister64 Operation
	Script Opcodes	Error Codes
Unregisters the ProgId info with the registry.  Behaviour is identic with ixoRegProgIdInfoUnregister.
Remarks
On 64-bit operating systems will remove info from the 64-bit OLE/COM hive.
#$+KixoRegExtensionInfoRegister Operation
	Script Opcodes	Error Codes
Registers the Extension info with the registry.
Parameters:
Field 1:  Feature. The extension server feature.
Field 2:  Component. The component id (from the Component Table) of the component whose key file is the extension server.
Field 3:  FileName. The (key) file of the component.
Field 4:  Extension. The extension.
Field 5:  ProgId. The optional progID.
Field 6:  ShellNew. The value name under the ShellNew key.
Field 7:  ShellNewValue. The value.
Field 8:  ContentType. The MIME Content Type to be associated with the extension.
Field 9:  Order. The number of verbs associated with the extension that need to be in the order specified (they are at the end of the sequence of verbs).
Field 10:  Verb1. The first verb.
Field 11:  Command1. The command associated with the first verb.
Field 12:  Arguments1. The arguments to be passed to the server when invoking the first verb.
Field 13:  Verb2. The second verb.
Field 14:  Command2.  The command associated with the second verb.
Field 15:  Arguments2.  The arguments to be passed to the server when invoking the second verb.
...
...
...
NOTE: This is a variable length record operation, the size depending on the number of verbs (may be 0 or more) supported by the extension server.

Sequencing Restrictions

Progress Notifications
ActionData record with the following fields:
Field 1:  Extension

Error Messages and MessageBox Styles

Remarks
On 64-bit operating systems will write info into the 32-bit OLE/COM hive.
#$+KixoRegExtensionInfoRegister64 Operation
	Script Opcodes	Error Codes
Registers the Extension info with the registry.  Behaviour is identic with ixoRegExtensionInfoRegister.
Remarks
On 64-bit operating systems will write info into the 64-bit OLE/COM hive.
#$+KixoRegExtensionInfoUnregister Operation
	Script Opcodes	Error Codes
Unregisters the Extension info with the registry.
Parameters:
Field 1:  Feature. The extension server feature.
Field 2:  Component. The component id (from the Component Table) of the component whose key file is the extension server.
Field 3:  FileName. The (key) file of the component.
Field 4:  Extension. The extension.
Field 5:  ProgId. The optional progID.
Field 6:  ShellNew. The value name under the ShellNew key.
Field 7:  ShellNewValue. The value.
Field 8:  ContentType. The MIME Content Type to be associated with the extension.
Field 9:  Order. The number of verbs associated with the extension that need to be in the order specified (they are at the end of the sequence of verbs).
Field 10:  Verb1. The first verb.
Field 11:  Command1. The command associated with the first verb.
Field 12:  Arguments1. The arguments to be passed to the server when invoking the first verb.
Field 13:  Verb2. The second verb.
Field 14:  Command2.  The command associated with the second verb.
Field 15:  Arguments2.  The arguments to be passed to the server when invoking the second verb.
...
...
...
NOTE: This is a variable length record operation, the size depending on the number of verbs (may be 0 or more) supported by the extension server.

Sequencing Restrictions

Progress Notifications
ActionData record with the following fields:
Field 1:  Extension

Error Messages and MessageBox Styles

Remarks
On 64-bit operating systems will remove info from the 32-bit OLE/COM hive.
#$+KixoRegExtensionInfoUnregister64 Operation
	Script Opcodes	Error Codes
Unregisters the Extension info with the registry.  Behaviour is identic with ixoRegExtensionInfoUnregister.
Remarks
On 64-bit operating systems will remove info from the 64-bit OLE/COM hive.
#$+KixoRegisterBackupFile Operation
	Script Opcodes	Error Codes
Marks a file as a backup file that may be removed with the rollback script. No execution is performed with this operation. This operation is used when removing rollback scripts and backup files.
Parameters:
Field 1:  Full path of file.
Sequencing Restrictions
None.
Progress Notifications
None.
Error Messages and MessageBox Styles
None.
Remarks
This operation is only relevant in a rollback script.
#$+KixoTypeLibraryRegister Operation
	Script Opcodes	Error Codes
Registers/ advertises a type library.
Parameters:
Field 1:  Feature. The type library server feature.
Field 2:  Component. The component id (from the Component Table) of the component whose key file is the type library.
Field 3:  FileName. The (key) file of the component.
Field 4:  LibID. The UUID for the type library.
Field 5:  Version. the short integer version number.
Field 6:  Description. The description of the type library.
Field 7:  Language. The language of the type library.
Field 8:  Help Path. This the path of the help file for the type library.

Sequencing Restrictions

Progress Notifications
ActionData record with the following fields:
Field 1:  LibID

Error Messages and MessageBox Styles

Remarks

#$+KixoTypeLibraryUnregister Operation
	Script Opcodes	Error Codes
Unregisters/ unadvertises a type library.
Parameters:
Field 1:  Feature. The type library server feature.
Field 2:  Component. The component id (from the Component Table) of the component whose key file is the type library.
Field 3:  FileName. The (key) file of the component.
Field 4:  LibID. The UUID for the type library.
Field 5:  Version. the short integer version number.
Field 6:  Description. The description of the type library.
Field 7:  Language. The language of the type library.
Field 8:  Help Path. This the path of the help file for the type library.

Sequencing Restrictions

Progress Notifications
ActionData record with the following fields:
Field 1:  LibID

Error Messages and MessageBox Styles

Remarks

#$+KixoCustomActionSchedule Operation
	Script Opcodes	Error Codes
Executes a scheduled custom action using information stored in the script record, except passes the record to the rollback script if it is a rollback or commit custom action.
Parameters:
Field 1: Action, name of action.
Field 2: ActionType, combination of icaXXX flags.
Field 3: Source. Information from Source column of CustomAction table.
Field 4: Target. Information from Target column of CustomAction table.
Field 5: CustomActionData. A string containing context information, set from property.
Sequencing Restrictions

Remarks
The Source field will contain the action binary data if the custom action was stored within a database stream. The CustomActionData field is set with the value of the property named the same as the primary key in the CustomAction table entry.
#$+KixoCustomActionRollback Operation
	Script Opcodes	Error Codes
Executes a rollback custom action upon failure of script execution, using information stored in the script record, passed over from the install script.
Parameters:
Field 1: Action, name of action.
Field 2: ActionType, combination of icaXXX flags.
Field 3: Source. Information from Source column of CustomAction table.
Field 4: Target. Information from Target column of CustomAction table.
Field 5: CustomActionData. A string containing context information, set from property.
Sequencing Restrictions

Remarks
The Source field will contain the action binary data if the custom action was stored within a database stream. The CustomActionData field is set with the value of the property named the same as the primary key in the CustomAction table entry.
#$+KixoCustomActionCommit Operation
	Script Opcodes	Error Codes
Executes a commit custom action upon successful completion of script execution, using information stored in the script record, passed over from the install script.
Parameters:
Field 1: Action, name of action.
Field 2: ActionType, combination of icaXXX flags.
Field 3: Source. Information from Source column of CustomAction table.
Field 4: Target. Information from Target column of CustomAction table.
Field 5: CustomActionData. A string containing context information, set from property.
Sequencing Restrictions

Remarks
The Source field will contain the action binary data if the custom action was stored within a database stream. The CustomActionData field is set with the value of the property named the same as the primary key in the CustomAction table entry.
#$+KixoODBCInstallDriverManager Operation
	Script Opcodes	Error Codes
Registers the driver manager for the first MSI product to become a client of the ODBC driver manager component, or unregisters the driver manager of the current product is removing the last client of the ODBC driver manager component.
Parameters:
Field 1:  State: 1 to register, 2 to unregister.
Sequencing Restrictions
Must come after ixoFileCopy for manager files and before other ODBC ops on register.
Must come before ixoFileRemove on manager files and after other ODBC ops on unregister.
Remarks

#$+KixoODBCInstallDriver Operation
	Script Opcodes	Error Codes
Registers an ODBC driver, configured with its set of attributes.
Parameters:
Field 1: DriverKey,  registered name of driver, ODBC term: description.
Field 2: Component,  component ID, used to check for existing clients.
Field 3: Folder,     location of driver.
Field 4: Attribute_, name of driver attribute, repeating pairs with value.
Field 5: Value_,     associated value for attribute in repeating pair.
Sequencing Restrictions
Must come after ixoFileCopy for driver files and after ixoODBCDriverManager register.
Remarks

#$+KixoODBCRemoveDriver Operation
	Script Opcodes	Error Codes
Removes the registration for a driver.
Parameters:
Field 1: DriverKey,  registered name of driver, ODBC term: description.
Field 2: Component,  component ID, used to check for remaining clients.
Sequencing Restrictions
Must come before ixoFileRemove for driver files and before ixoODBCDriverManager unregister.
Remarks

#$+KixoODBCDataSource Operation
	Script Opcodes	Error Codes
Registers an ODBC data source, associated with a particular driver, or unregisters an ODBC data source.
Parameters:
Field 1: DriverKey,    registered name of driver, ODBC term: description.
Field 2: Component,    component ID.
Field 3: Registration, SQL_ADD_DSN, SQL_ADD_SYS_DSN, SQL_REMOVE_DSN, SQL_REMOVE_SYS_DSN.
Field 4: Attribute_,   name of data source attribute, repeating pairs with value.
Field 5: Value_,       associated value for attribute in repeating pair.
Sequencing Restrictions
Must come after ixoODBCInstallDriver for associated driver on ADD.
Must come before ixoODBCRemoveDriver for associated driver on REMOVE.
Remarks

#$+KixoODBCInstallTranslator Operation
	Script Opcodes	Error Codes
Registers an ODBC data translator.
Parameters:
Field 1: TranslatorKey,  registered name of translator, ODBC term: description.
Field 2: Component,  component ID, used to check for existing clients.
Field 3: Folder,     location of translator.
Field 4: Attribute_, name of translator attribute, repeating pairs with value.
Field 5: Value_,     associated value for attribute in repeating pair.
Sequencing Restrictions
Must come after ixoFileCopy for translator files and after ixoODBCDriverManager register.
Remarks

#$+KixoODBCRemoveTranslator Operation
	Script Opcodes	Error Codes
Unregisters an ODBC data translator.
Parameters:
Field 1: TranslatorKey,  registered name of translator, ODBC term: description.
Field 2: Component,  component ID, used to check for remaining clients.
Sequencing Restrictions
Must come before ixoFileRemove for translator files and before ixoODBCDriverManager unregister.
Remarks

#$+KixoServiceControl Operation
	Script Opcodes	Error Codes
Starts a service currently installed on the machine.   
Parameters:
Field 1: MachineName. MachineName property to start the service on.
Field 2: Name.  Internal name of the service.  Does not includes slashes or spaces.
Field 3: Action. Bitfield.  1 = Start, 2 = Stop, 4 = <reserved>, 8 = Delete
Field 3: Wait.  Boolean for whether to wait for the service control event to complete.
Field 4: StartupArguments.  List of arguments, separated by nulls, with a double null at the end.

Sequencing Restrictions

Progress Notifications
ActionData record with the following fields:
Field 1:  Display name of the service.
Field 2:  Internal name of the service.

Error Messages and MessageBox Styles

Remarks

#$+KixoServiceInstall Operation
	Script Opcodes	Error Codes
Starts a service currently installed on the machine.   
Parameters:
Field 1: Name.  Internal name of the service.  Does not includes slashes or spaces.
Field 2: DisplayName.  Display name of the service.
Field 3: ImagePath.  Full command line for invoking the service.
Field 4: ServiceType.  Type of service.
Field 6: StartType.  When to start service.
Field 7: ErrorControl.  severity if service fails to start.
Field 8: LoadOrderGroup.  Name of load ordering group.
Field 9: Dependencies.  Null delimited list of services on which this service depends.
Field 10:TagId.  Used only for rollback.  Tag for service start order.
Field 11:StartName.  User for the service to run as.
Field 12:Password.  Clear-text password for user specified in StartName.
Field 13:Description.  A description of the service. Displayed by the Services MMC snap-in. Win2K only

Sequencing Restrictions

Progress Notifications

Error Messages and MessageBox Styles

Remarks

#$+KixoUpdateEnvironmentStrings Operation
	Script Opcodes	Error Codes
This operation performs an update on the system environmental variables.  On Windows '95 theseoccur in AutoExec.bat, on Windows NT they occur in the registry.
Parameters:
Field 1: Name.  Name of the variable to set.
Field 2: Value.  Value to set in the variable.
Field 3: Delimiter.  Separator between values, if the value is one of several.
Field 4: Action.  Bitfield specifying type of operation to perform:
	2   Set a value
	4   Set a value only if the variable is absent.
	8   Remove the value from the variable.
	16  Append the specified value to the named variable.
	32  Prepend the specified value to named variable.
Field 5: AutoExec Path.  95 Only, ignored on NT.  Contains either the Windows Volume path, or content of the WIN95_ENVIRONMENT_TEST property.  This allows you to modify a file in a test directory rather than working on your primary file.
Sequencing Restrictions

Progress Notifications
None.
Error Messages and MessageBox Styles
None.
Remarks

#$+KixoComPlusRegister Operation
	Script Opcodes	Error Codes
Installs the COM+ application.
Parameters:
Field 1: AppID: The Application id guid.
Field 2: AplFileName: The name of the file that contains application configuration information.
Field 3: AppDir: The directory the application is installed to.
Field 4: AppType: Information from the ExpType column of the Complus table.
Field 5: InstallUsers: Whether to install the users of the application.
Field 6: RSN: Remote server name for proxy applications.

Sequencing Restrictions

Remarks

#$+KixoComPlusUnregister Operation
	Script Opcodes	Error Codes
Uninstalls the COM+ application.
Parameters:
Field 1: AppID: The Application id guid.
Field 2: AplFileName: The name of the file that contains application configuration information.
Field 3: AppDir: The directory the application is installed to.
Field 4: AppType: Information from the ExpType column of the Complus table.
Field 5: InstallUsers: Whether to install the users of the application.
Field 6: RSN: Remote server name for proxy applications.

Sequencing Restrictions

Remarks

#$+KixoComPlusRegisterMetaOnly Operation
	Script Opcodes	Error Codes
Not used - only a placeholder.
Parameters:

Sequencing Restrictions

Remarks

#$+KixoComPlusUnregisterMetaOnly Operation
	Script Opcodes	Error Codes
Not used - only a placeholder.
Parameters:

Sequencing Restrictions

Remarks

#$+KixoComPlusCommit Operation
	Script Opcodes	Error Codes
Not used - only a placeholder.
Parameters:

Sequencing Restrictions

Remarks

#$+KixoComPlusRollback Operation
	Script Opcodes	Error Codes
Not used - only a placeholder.
Parameters:

Sequencing Restrictions

Remarks

#$+KixoSecureTransformCache Operation
	Script Opcodes	Error Codes
Caches the specified transform into the secure transforms directory for the product.
Parameters:
Field 1: Transform.  Full path to the transform to cache.

Sequencing Restrictions

Remarks

#$K+MsiExecute Object
	Msi Objects	Script Operations
The MsiExecute object is used to execute script operations either individually or as part of a script file. This object can also enumerate a script file. Finally, the MsiExecute object can be used to roll back one or more installations and clean up back-up files and rollback scripts when they are not needed anymore. The MsiExecute object is created by the CreateExecutor method.
Properties

Methods
EnumerateScript
ExecuteRecord
RemoveRollbackFiles
Rollback
RollbackFinalize
RunScript
CreateScript
WriteScriptRecord
CloseScript

#$+KExecuteRecord Method
	MsiExecute Object	Msi Objects	Script Operations
Executes a single script operation. The operation is defined by the given opcode, and the operation parameters are passed in an MsiRecord object.
Syntax
object.ExecuteRecord(opcode, params)
object
Required. The MsiExecute object.
opcode
Required. The opcode of the operation to be executed.
params
Required. An MsiRecord object containing the operation parameters. Note that this argument is required even if the operation does not accept any parameters. In this case, the record would be 0-length.
Remarks

#$+KRunScript Method
	MsiExecute Object	Msi Objects	Script Operations
Runs a script. The script may be an installation, advertisement or rollback script. The type of the script is defined in the ixoHeader record. Each type of script is executed in a slightly different way. !! Explanation !!
Syntax
object.RunScript(scriptFile)
object
Required. The MsiExecute object.
scriptfile
Required. The full path (string) to an installation script file.
Remarks
Scriptfile format
Return Values
iesNoAction       = 0   action not invoked, most-likely does not exist.
iesSuccess        = 1   IDOK, completed actions successfully.
iesUserExit       = 2   IDCANCEL, user terminated prematurely.
iesFailure        = 3   IDABORT, unrecoverable error occurred.
iesSuspend        = 4   IDRETRY, sequence suspended, to be resumed later.
iesFinished       = 5   IDIGNORE, skip remainin actions, not an error
iesWrongState     = 6   calling sequence error, not in initialized state.
iesBadActionData  = 7   from Sequence(), invalid Action table record data.

!! Rollback explanation!!
#$+KCreateScript Method
	MsiExecute Object	Msi Objects	Script Operations
Creates a script file that can be written to with WriteScriptRecord and closed with CloseScript. Once the script is closed, it may be run with RunScript.  This method returns TRUE if the script could be created, FALSE if it could not.
Syntax
object.CreateScript(scriptFile)
object
Required. The MsiExecute object.
scriptfile
Required. The full path (string) to an installation script file to create.
#$+KWriteScriptRecord Method
	MsiExecute Object	Msi Objects	Script Operations
Writes an operation to the script opened by CreateScript. The operation is defined by the given opcode, and the operation parameters are passed in an MsiRecord object.  This method returns TRUE if the script record could be written, FALSE if it could not.
Syntax
object.WriteScriptRecord(opcode, params)
object
Required. The MsiExecute object.
opcode
Required. The opcode of the operation to be written.
params
Required. An MsiRecord object containing the operation parameters. Note that this argument is required even if the operation does not accept any parameters. In this case, the record would be 0-length.
#$+KCloseScript Method
	MsiExecute Object	Msi Objects	Script Operations
Closes the script created by CreateScript.
Syntax
object.CloseScript
object
Required. The MsiExecute object.
#$+KEnumerateScript Method
	MsiExecute Object	Msi Objects	Script Operations
Returns a collection of MsiRecords, each containing a script record. See the remarks for the record format.
Syntax
object.EnumerateScript(scriptFile)
object
Required. The MsiExecute object.
scriptfile
Required. The full path (string) to an installation script file.
Remarks
The record contains the opcode in field 0 and the parameters in the following fields.
#$+KRemoveRollbackFiles Method
	MsiExecute Object	Msi Objects	Script Operations
This method removes all rollback scripts and backup files on the local machine created before the specified date, or all rollback scripts if the given date is 0.
Syntax
object.RemoveRollbackFiles(date)
object
Required. The MsiExecute object.
date
Required. All rollback scripts and files created before this date are removed. If this value is 0, all rollback scripts and files ever created are removed.
Remarks

#$+KRollback Method
	MsiExecute Object	Msi Objects	Script Operations
Rolls back changes made to the system since the specified date.  This is accomplished by running all rollback scripts registered since the specified date. Rollback scripts are registered with the RegisterRollbackScript method.
Syntax
object.Rollback(date)
object
Required. The MsiExecute object.
date
Required, The date to roll back to.
Remarks

#$+KRollbackFinalize Method
	MsiExecute Object	Msi Objects	Script Operations
Not yet implemented.Calls either Rollback or RemoveRollbackFiles depending on the return state of the install and the current rollback policy for the local machine.
Syntax
object.RollbackFinalize
object
Required. The MsiExecute object.
Remarks
!!Additional notes!! 
#$K+MsiDecomposeDescriptor	
 
Returns constituent parts of a descriptor.
UINT MsiDecomposeDescriptor(
 LPCTSTR szDescriptor,	
 LPCSTR szProductCode,	// returned product
 LPCSTR szFeatureId,	// returned feature
 LPCSTR szComponentCode,	// returned component code
 DWORD *pcchArgsOffset	// returned offset of args in descriptor
 );
Parameters
szDescriptor
The component descriptor.
szProductCode
Points to a variable that receives the product code. The buffer should be large enough to hold 39 characters. This parameter can be NULL.
szFeatureId
Points to a variable that receives the component code. The buffer should be large enough to hold (MAX_FEATURE_CHARS + 1) characters. This parameter can be NULL.
szComponentCode
Points to a variable that receives the component code. The buffer should be large enough to hold 39 characters. This parameter can be NULL.
pcchArgsOffset
Points to a variable that will be filled with the offset to the arguments. This is to handle the case when the descriptor is followed by arguments. If, for example, the descriptor is 70 characters long we will pass back 71 to indicate that the arguments start at the 71st character. This parameter can be NULL.
Return Values
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is ERROR_INVALID_PARAMETER

#$K+MsiGetProductCodeFromPackageCode	
 
Enumerates products on the machine, returning the first product that has the given package code.
UINT MsiGetProductCodeFromPackageCode(
 LPCTSTR szPackageCode,	
 LPCSTR szProductCode,	// returned product
 );
Parameters
szPackageCode
The package code to find.
szProductCode
Points to a variable that receives the product code. The buffer should be large enough to hold 39 characters.

Return Values
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is ERROR_UNKNOWN_PRODUCT

#$+KMsiProvideComponentFromDescriptor	
Group 
Return full component path, performing any necessary installation. Prompts for source if necessary. Increments usage count for the feature.
UINT MsiProvideComponentFromDescriptor(
 LPCTSTR szDescriptor,    // product,feature,component info
 LPTSTR lpPathBuf,        // returned path to component's keyfile
 DWORD *pcchPathBuf	,     // in/out buffer character count
 DWORD *pcchArgsOffset	   // returned offset of args in descriptor
 );
 
Parameters
szDescriptor
The component descriptor for the component to be provided.
lpPathBuf
Points to a variable that receives the path to the component. This parameter can be NULL.
pcchPathBuf
Points to a variable that specifies the size, in characters, of the buffer pointed to by the lpPathBuf parameter. Upon success of this function, the parameter will contain the length of the string in lpPathBuf.
If lpPathBuf is NULL, pcchBuf can be NULL.  
pcchArgsOffset
Points to a variable that will be filled with the offset to the arguments. This is to handle the case when the descriptor is followed by arguments, as it may be when passed to us by OLE. The offset will be the length of the descriptor. This parameter can be NULL.

Return Values
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is one of the following error codes:
Error Code	Meaning	

ERROR_INSTALL_SERVICE_FAILURE	Failure accessing the install service	
ERROR_INSTALL_USEREXIT	The user cancelled the installation	
ERROR_INSTALL_FAILURE	Fatal error during installation	
ERROR_INSTALL_SUSPEND	The installation was suspended and is incomplete	
ERROR_UNKNOWN_PRODUCT	The product code does not identify a know product	
ERROR_UNKNOWN_FEATURE	The feature Id does not identify a know feature	
ERROR_INSTALL_INVALIDARG	An invalid argument was passed to the function	
ERROR_BAD_CONFIGURATION	The configuration data is corrupt	

Remarks
The function is a wrapper around MsiProvideComponent

#$+KMsiConfigureFeatureFromDescriptor¦@¦
Group 
The MsiConfigureFeatureFromDescriptor configures the installed state for a productfeature.
UINT MsiConfigureFeatureFromDescriptor(
 LPCTSTR szDescriptor,	        // descriptor
 INSTALLSTATE eInstallState   // install state
 );
 
Parameters
szDescriptor
A descriptor that identifies the feature to be configured.
eInstallState
The install state desired for the feature. One of the following:
State	Meaning	

INSTALLSTATE_LOCAL	The feature should be installed locally	
INSTALLSTATE_ABSENT	The feature should be uninstalled	
INSTALLSTATE_SOURCE	The feature should be installed to run from source	
INSTALLSTATE_DEFAULT	The feature should be installed to its default location	

Return Values
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is one of the following:
Any Action Error  or Initialization Error  
Any error code relating to accessing a file.
ERROR_INVALID_PARAMETER
Remarks
This function is a wrapper around MsiConfigureFeature 

#$+KMsiQueryFeatureStateFromDescriptor¦@¦
Group 
The MsiQueryFeatureStateFromDescriptor is a wrapper around MsiQueryFeatureState.
INSTALLSTATE MsiQueryFeatureStateFromDescriptor(
 LPCTSTR szDescriptor	        // descriptor
 );
 
Parameters
szDescriptor
A descriptor that identifies the feature to be queried.

Return Values
The return values are the same as MsiQueryFeatureState
Remarks
This function is a wrapper around MsiQueryFeatureState 

#$K+MsiGetProductInfoFromScript						Group
The MsiGetProductInfoFromScript returns the product info for an installer script file.
UINT __stdcall MsiGetProductInfoFromScript(
 LPCDSTR szScriptFile,		// path to installer script file
 LPDSTR lpProductBuf39,		// buffer for product code string GUID, 39 chars
 LANGID *plgidLanguage,		// return language Id
 DWORD *pdwVersion,		// return version: Maj:Min:Build <8:8:16>
 LPDSTR lpNameBuf,			// buffer to return readable product name
 DWORD *pcchNameBuf,		// in/out name buffer character count
 LPDSTR lpPackageName,		// buffer for package name
 DWORD *pcchPackageNameBuf		// in/out path buffer character count
 );
Parameters
szScriptFile
The full path to the script file.
lpProductBuf39
Points to a buffer that receives the product code.
plgidLanguage
Points to a buffer that receives the product language.
pdwVersion
Points to a buffer that receives the product version.
lpNameBuf
Points to a buffer that receives the product name.
pcchNameBuf
Points to a variable that specifies the size, in characters, of the buffer pointed to by the lpNameBuf parameter. This size should include the terminating null character. When the function returns, this variable contains the length of the class string stored in the buffer. The count returned does not include the terminating null character. If the buffer is not big enough, the function returns ERROR_MORE_DATA, and the variable contains the size of the string, in characters, without counting the null character.
lpPackageNameBuf
Points to a buffer that receives the package name.
pcchPackageNameBuf
Points to a variable that specifies the size, in characters, of the buffer pointed to by the lpPackageNameBuf parameter. This size should include the terminating null character. When the function returns, this variable contains the length of the class string stored in the buffer. The count returned does not include the terminating null character. If the buffer is not big enough, the function returns ERROR_MORE_DATA, and the variable contains the size of the string, in characters, without counting the null character.
Return Values
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is one of the following:
Error Code	Meaning	
ERROR_INVALID_PARAMETER	An invalid argument was passed to the function	
ERROR_MORE_DATA	A buffer was too small to hold the entire value	
ERROR_INSTALL_FAILURE	Could not get script info	

#$+KMsiAdvertiseProduct¦@¦
Group 
The MsiAdvertiseProduct function advertises a product.
UINT MsiAdvertiseProduct(
 LPCTSTR szPackagePath,    // location of package
 LPCTSTR szScriptfilePath, // if NULL, product is locally advertised
 LPCTSTR szTransforms,     // list of transforms to be applied
 LANGID lgidLanguage       // install language
 );
 
Parameters
szLauncherPath
The full path to the launcher of the product being advertised.
szScriptfilePath
The full path to scriptfile that will be created with the advertise information. If this parameter is NULL then the product is advertised locally.
szTransforms
A semi-colon delimited list of transforms to be applied.
lgidLanguage
The language to choose if the install source supports multiple languages. If lgidLanguage is LANG_NEUTRAL then we do a "best match" ??? 

Return Values
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is one of the following:
Any Action Error or Initialization Error 
Any error code relating to accessing a file.
ERROR_INVALID_PARAMETER

#$+KMsiProcessAdvertiseScript¦@¦
Group 
The MsiProcessAdvertiseScript function processes an advertise script file into the supplied locations.
UINT MsiProcessAdvertiseScript(
 LPCTSTR szScriptFile,	 // path to script from MsiAdvertiseProduct
 LPCTSTR szIconFolder,	 // optional path to folder for icon files and transforms
 HKEY hRegData,        // optional parent registry key
 BOOL fShortcuts,      // TRUE if shortcuts output
 BOOL fRemoveItems     // TRUE if specified items are to be removed
 );
 
Parameters
szScriptFile
The full path to a scriptfile generated by MsiAdvertiseProduct .
szIconFolder
An optional path to a folder in which advertised icon files and transform files should be placed.If this parameter is  NULL, no icon or transform files are written
hRegData
A registry key under which registry data will be mapped. If this parameter is NULL, the registry data will be placed under the appropriate key, based on whether the advertisement is per-user or per-machine.
fShortcuts
TRUE if shortcuts should be created. If a special folder is returned by SHGetSpecialFolderLocation(?) it will hold the shortcuts.
fRemoveItems
TRUE if specified items are to be removed instead of being created.

Return Values
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is one of the following error codes:
Error Code	Meaning	

ERROR_INSTALL_FAILURE	Processing failed	
ERROR_INVALID_PARAMETER	An invalid argument was passed to the function	

#$+KMsiAdvertiseScript¦@¦
Group 
The MsiAdvertiseScript function processes an advertise script file into the supplied locations.
UINT MsiAdvertiseScript(
LPCTSTRszScriptFile,	 // path to script from MsiAdvertiseProduct
DWORD  dwFlags,	     // the bit flags from SCRIPTFLAGS
PHKEY  phRegData, // optional parent registry key if reg data to be populated in a user specified location
BOOL   fRemoveItems// TRUE if specified items are to be removed
 );
 
Parameters
szScriptFile
The full path to a scriptfile generated by MsiAdvertiseProduct
dwFlags
The flags that control the advertisement. Can be a combination of the following 
SCRIPTFLAGS_CACHEINFO = 0x00000001L,   // set if the icons need to be created/ removed
SCRIPTFLAGS_SHORTCUTS = 0x00000004L,   // set if the shortcuts needs to be created/ deleted
SCRIPTFLAGS_MACHINEASSIGN = 0x00000008L,   // set if product to be assigned to machine
SCRIPTFLAGS_REGDATA_APPINFO = 0x00000010L,  // set if the app advt registry data needs to be written/ removed
SCRIPTFLAGS_REGDATA_CNFGINFO = 0x00000020L,  // set if the product cnfg mgmt. registry data needs to be written/ removed
SCRIPTFLAGS_REGDATA = SCRIPTFLAGS_REGDATA_APPINFO | SCRIPTFLAGS_REGDATA_CNFGINFO 
phRegData
A registry key under which registry data will be mapped. If this parameter is NULL, the registry data will be placed under the appropriate key, based on whether the advertisement is per-user or per-machine.
fRemoveItems
TRUE if specified items are to be removed instead of being created.

Return Values
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is one of the following error codes:
Error Code	Meaning	

ERROR_INSTALL_FAILURE	Processing failed	
ERROR_INVALID_PARAMETER	An invalid argument was passed to the function	

#$+KMsiGetPatchInfo¦@¦
Group 
The MsiGetPatchInfo function returns information about installed patches.
UINT MsiGetPatchInfo(
 LPCTSTR szPatch,    // patch code
 LPCTSTR szProperty, // attribute name, case-sensitive
 LPTSTR lpValueBuf,     // returned value, NULL if not desired
 DWORD *pcchValueBuf       // in/out buffer character count
 );
 
Parameters
szPatch
Specifies the patch code for the patch. A GUID.
szProperty
Specifies the property to be retrieved. INSTALLPROPERTY_LOCALPACKAGE is the only currently supported property.
lpValueBuf
Pointer to a buffer that receives the property value. This parameter can be NULL.
pcchValueBuf
Pointer to a variable that specifies the size, in characters, of the buffer pointed to by the lpValueBuf parameter. This size should include the terminating NULL character. If lpValueBuf is NULL, pcchValueBuf can be NULL.

Return Values
If the function succeeds, the return value is ERROR_SUCCESS. If the function fails, the return values are the same as those returned from MsiGetProductInfo

#$+KMsiEnumPatches¦@¦
Group 
The MsiEnumPatches function enumerates all patches applied to a single product, in the order the patches were applied.
UINT MsiEnumPatches(
 LPCTSTR szProduct,    // product code
 DWORD iPatchIndex, // 0-based index into installed patches
 LPTSTR lpPatchBuf,     // patch code buffer,  size=39
 LPTSTR lpTransformsBuf,     // transforms buffer
 DWORD *pcchTransformsBuf       // in/out transforms buffer character count
 );
 
Parameters
szProduct
Specifies the product whose patches are to be enumerated.
iPatchIndex
Specifies the index of the patch to retrieve. This parameter should be zero for the first call to the MsiEnumPatches function and then incremented for subsequent calls.
lpPatchBuf
Pointer to a buffer that receives the patch code.  This buffer must be of size 39.
lpTransformsBuf
Pointer to a buffer that receives the list of transforms from the patch that are to be applied to the product package.  This list has the same format as the TRANSFORMS property.
pcchTransformsBuf
Pointer to a variable that specifies the size, in characters, of the buffer pointed to by the lpTransformsBuf parameter. This size should include the terminating NULL character.

Return Values
If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the possible return values are identical to the return values of MsiEnumFeatures.
#$+KMsiLoadString¦@¦
Group 
The MsiLoadString function is an extension to the LoadString Windows API to permit specification of a string of a particular language(* This API is not automated)
UINT MsiLoadString(
 HINSTANCE hInstance,    // handle to instance containing resource
 UINT uID, // resource ID of string
 LPDSTR lpBuffer,     // buffer to hold string
 int nBufferMax,     // buffer length
 WORD wLanguage       // language
 );
 
Parameters
hInstance
Specifies the instance containing the resource with the string.
uID
Specifies the resource ID of the string.
lpBuffer
Pointer to a buffer that receives the string.
nBufferMax
Lenght of buffer.
wLanguage
Value of particular language to be loaded

Return Values
If the function succeeds, the return value is the codepage of the found string.
If the function fails, it returns 0.  The function fails if the resource could not be found.
Remarks
MsiLoadString could be considered a LoadStringEx (in similar manner as FindResourceEx is to FindResource)
 MsiLoadString attempts to find a matching string in the following order
 (1)Language requested (wLanguage parameter)
 (2)User-Interface language or User Locale language 
 (3)System Default language 
 (4)English (base English, not US English)
 (5)Language Neutral
#$+KMsiMessageBox¦@¦
Group 
The MsiMessageBox function is a wrapper around the Windows MessageBox API that supports non-system codepages.It ignores the MB_APPMODAL, MB_TASKMODAL, and MB_SYSTEMMODAL flags.(* This API is not automated)
int MsiMessageBox(
 HWND hWnd,    // handle to window
 LPCDSTR szText,     // text for message box
 LPCDSTR szCaption,     // text for caption for message box
 UINT uiType       // attributes for buttons to appear on message box
 UINT uiCodepage       // codepage to use
 WORD iLangId       // language to use
 );
 
Parameters
hWnd
Specifies the handle to the window
szText
Specifies the text to appear in the message box
szCaption
Specifies the caption for the message box
uiType
Specifies the attributes for the message box (which buttons, icons, etc).  Same as Windows API MessageBox documentation
uiCodepage
Specifies the codepage to use
iLangId
Specifies the language to use

Return Values
It returns the return value from the Windows DialogboxParam API.
#$+KMsiIsProductElevated
The MsiIsProductElevated function checks the elevation state of a product.
UINT MsiIsProductElevated(
LPCTSTR szProductCode,	 // Product code to check.
BOOL*   pfElevated,	   // pointer to BOOL for result
 );
 
Parameters
szProductCode
The full product code GUID of the product. This may not be NULL or empty.
pfElevated
A pointer to a BOOL for the result. This may not be NULL.
Return Values
If the function succeeds, the return value is ERROR_SUCCESS, andthe pfElevated is set to TRUE if the product is considered managed. This does not take into account policies such as AlwaysInstallElevated, but does verify that LOCALSYSTEM owns the product's registry data. The function will always fail on Win9X.
If the function fails, the return value is one of the following error codes:
Error Code	Meaning	

ERROR_UNKNOWN_PRODUCT	The product is not currently known on this machine.	
ERROR_INVALID_PARAMETER	An invalid argument was passed to the function	
ERROR_BAD_CONFIGURATION	The configuration information for the product is corrup.	
ERROR_FUNCTION_FAILED	The call failed.