#include-once ;~ #AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w 7 #Region #### User Includes #### #include 'OI_AutoItUDFs.au3' #include 'OI_ProgramConstants.au3' #include 'OI_Log.au3' ;~ #include 'OI_Misc.au3' #EndRegion #### User Includes #### Func _MSI_GetMetaData($s_PatchFile) Local $o_MyError = __MSI_ComErrorRegister() #forceref $o_MyError Local $i_LineNumber = 0 ; added for testing, should change to 16 Local $s_Properties = _ 'KBArticle Number|' & _ 'Description|' & _ 'Classification|' & _ 'StdPackageName|' & _ 'TargetProductName|' & _ 'BuildNumber|' & _ 'CreationTimeUTC' _Log_WriteDebug('¦Retrieving Metadata...') _Log_ErrorRoute('add', 'MSI', 26, '_MSI_GetPropertyValues', $s_PatchFile & '#MsiPatchMetadata#Property,Value#' & $s_Properties) Local $as_Metadata = _MSI_GetPropertyValues($s_PatchFile, 'MsiPatchMetadata', 'Property,Value', $s_Properties) If Not @error Then _Log_WriteDebug(@extended & ' properties retrieved¦') _Log_ErrorRoute() Return $as_Metadata EndIf Return SetError(1, _Log_ErrorRoute(), $as_Metadata) EndFunc ;==>_MSI_GetMetaData Func _MSI_GetPropertyValues($s_FilePath, $s_TableName, $s_Columns, $s_Properties) Local $o_MyError = __MSI_ComErrorRegister() #forceref $o_MyError _Log_WriteDebug('MSI File Path: ' & $s_FilePath, 1) Local $v_Parameters = $s_FilePath _Log_ErrorRoute('add', 'MSI', 35, '__Msi_OpenDatabase', $v_Parameters) Local $o_DataBase = __Msi_OpenDatabase($v_Parameters) ; open the msi/msp file If Not @error Then Local $s_SqlQuery = "SELECT " & $s_Columns & " FROM " & $s_TableName ; set the db query _Log_WriteDebug('SQL Query : ' & $s_SqlQuery, 1) __Msi_ErrorSetValues(-1, -1, -1, $s_FilePath, $s_TableName, $s_Columns, $s_SqlQuery) ; update variables for future COM errors _Log_ErrorRoute('update', 'MSI', 43, '__Msi_ViewOpen', '$o_DataBase (' & IsObj($o_DataBase) & ')' & '#' & $s_SqlQuery) Local $o_View = __Msi_ViewOpen($o_DataBase, $s_SqlQuery) If Not @error Then _Log_ErrorRoute('update', 'MSI', 47, '__Msi_ViewExecute', '$o_View (' & IsObj($o_View) & ')') __Msi_ViewExecute($o_View) If Not @error Then Local $as_Metadata = StringSplit($s_Properties, '|') ; create an array for the requested properties Local $i_Total = $as_Metadata[0] ; total number of properties to retrieve _Log_WriteDebug('Querying property values', 1) Local $i_Count = 0 ; set the number or properties requested Local $i_Index = 0 ; initialise the index where the property is in the $as_Metadata array _Log_ErrorRoute('update', 'MSI', 58, '__Msi_ViewFetch', '$o_View (' & IsObj($o_View) & ')') Local $o_Records = __Msi_ViewFetch($o_View) ; get the record object While $i_Count < $i_Total And IsObj($o_Records) ; check if the current stringdata contains the requested property ;~ If _String_SearchForWords($s_Properties, $o_Records.StringData(1)) Then $i_Index = _ArraySearch($as_Metadata, $o_Records.StringData(1)) ; search $as_Metadata for the index of the property If @error Then ; add later Else If $i_Total = 1 Then __Msi_ErrorSetValues(70, '$o_Records.StringData[2]') ; update variables for future COM errors $as_Metadata = $o_Records.StringData(2) $i_Count += 1 ; increase the array index _Log_WriteDebug('Found (' & $i_Count & '/' & $i_Total & '): ' & $o_Records.StringData(1) & ' = ' & $o_Records.StringData(2), 2) ExitLoop Else __Msi_ErrorSetValues(76, '$o_Records.StringData[2]') ; update variables for future COM errors $as_Metadata[$i_Index] = $o_Records.StringData(2) ; replace the requested property with the returned value $s_Properties = StringReplace($s_Properties, $o_Records.StringData(1), '') ; remove the string from the search string EndIf $i_Count += 1 ; increase the array index _Log_WriteDebug('Found (' & $i_Count & '/' & $i_Total & '): ' & $o_Records.StringData(1) & ' = ' & $o_Records.StringData(2), 2) EndIf ;~ EndIf _Log_ErrorRoute('update', 'MSI', 86, '__Msi_ViewFetch', '$o_View (' & IsObj($o_View) & ')') $o_Records = __Msi_ViewFetch($o_View) ; get the next set of records WEnd _Log_ErrorRoute('update', 'MSI', 90, '__Msi_ViewClose', '$o_View (' & IsObj($o_View) & ')') __Msi_ViewClose($o_View) If $i_Count <> $i_Total Then _Log_WriteWarning(StringRegExpReplace($s_Properties, "\A[\|]+|[\|]+\Z", "") & ' were not found') _Log_ErrorRoute() ; clear this functions error route info __Msi_CloseDatabase() Return SetError(0, $i_Count, $as_Metadata) ; return the array with the values, check @extended for count EndIf EndIf EndIf Return SetError(1, _Log_ErrorRoute(), __Msi_CloseDatabase()) EndFunc ;==>_MSI_GetPropertyValues ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Msi_GetSummaryInfo ; Description ...: ; Syntax ........: _Msi_GetSummaryInfo($s_FilePath[, $s_Property = '*']) ; Parameters ....: $s_FilePath - A string value. ; $s_Property - [optional] A string value. Default is '*'. ; Return values .: None ; Author ........: Benners ; Modified ......: ; Remarks .......: ; Link ..........: https://msdn.microsoft.com/en-us/library/windows/desktop/aa372049(v=vs.85).aspx ; Example .......: No ; =============================================================================================================================== Func _Msi_GetSummaryInfo($s_FilePath, $i_Property = 0) Local $o_MyError = __MSI_ComErrorRegister() #forceref $o_MyError _Log_ErrorRoute('add', 'MSI', 122, '__MSI_CreateInstallerObject', '') Local $o_DataBase = __MSI_CreateInstallerObject() ; returns db object or sets @error to 1 If Not @error Then __Msi_ErrorSetValues(126, '$o_DataBase.SummaryInformation', $s_FilePath & '#' & 0, $s_FilePath) Local $o_SummaryInfo = $o_DataBase.SummaryInformation($s_FilePath, 0) If Not @error Then If Not $i_Property Then ; create array and return all summary information Local $a_SummaryInfo[$MSI_SUMINFO_MAXROWS][2] ; declare array $a_SummaryInfo[$MSI_SUMINFO_PROPERTIES][0] = '# of Properties: ' $a_SummaryInfo[$MSI_SUMINFO_CODEPAGE][0] = 'Code Page: ' ; numeric value of the ANSI code page used for any strings that are stored in the summary information $a_SummaryInfo[$MSI_SUMINFO_TITLE][0] = 'Title: ' ; describes the type of the installer package. Phrases such as "Installation Database" or "Transform" or "Patch" may be used for this property $a_SummaryInfo[$MSI_SUMINFO_SUBJECT][0] = 'Subject: ' ; conveys the name of the product, transform, or patch that is installed by the package. $a_SummaryInfo[$MSI_SUMINFO_AUTHOR][0] = 'Author: ' ; manufacturer of the installation package, transform, or patch package $a_SummaryInfo[$MSI_SUMINFO_KEYWORDS][0] = 'Keywords: ' ; contains a list of keywords. The keywords may be used by file browsers to do keyword searches for a file. This property contains a list of sources of the patch in a patch package $a_SummaryInfo[$MSI_SUMINFO_COMMENTS][0] = 'Comments: ' ; conveys the general purpose of the installation package, transform, or patch package $a_SummaryInfo[$MSI_SUMINFO_TEMPLATE][0] = 'Template: ' ; indicates the platform and language versions that are compatible with this installation database $a_SummaryInfo[$MSI_SUMINFO_LASTSAVEDBY][0] = 'Last Saved By: ' ; Property to a value that depends on whether this is an installation package, transform, or patch package $a_SummaryInfo[$MSI_SUMINFO_REVISIONNUMBER][0] = 'Revision Number: ' ;installation package, contains the package code. For a patch package, the Revision Number Summary property specifies the GUID patch code for the patch. This can be followed by a list of patch code GUIDs for obsolete patches $a_SummaryInfo[$MSI_SUMINFO_EDITTIME][0] = 'Edit Time: ' $a_SummaryInfo[$MSI_SUMINFO_LASTPRINTED][0] = 'Last Printed: ' ;In an installation package, can be set to the date and time during an admin installation to record when the admin image was created. For non-admin installations, this property is the same as the Create Time/Date Summary property. $a_SummaryInfo[$MSI_SUMINFO_CREATETIME][0] = 'Create Time/Date: ' ; conveys the time and date when an author created the installation package, transform, or patch package $a_SummaryInfo[$MSI_SUMINFO_LASTSAVEDTIME][0] = 'Last Saved Time/Date: ' ; The Last Saved Time/Date Summary property conveys the last time when this installation package, transform, or patch package was modified. $a_SummaryInfo[$MSI_SUMINFO_PAGECOUNT][0] = 'Page Count: ' $a_SummaryInfo[$MSI_SUMINFO_WORDCOUNT][0] = 'Word Count: ' $a_SummaryInfo[$MSI_SUMINFO_CHARACTERCOUNT][0] = 'Character Count: ' ; null $a_SummaryInfo[$MSI_SUMINFO_THUMBNAIL][0] = 'Thumbnail:' $a_SummaryInfo[$MSI_SUMINFO_CREATINGAPPLICATION][0] = 'Creating Application: ' ; The name of the software used to create the patch. $a_SummaryInfo[$MSI_SUMINFO_SECURITY][0] = 'Security: ' ; The value of this property should be 4 - Enforced read-only. __Msi_ErrorSetValues(154, '$o_SummaryInfo.PropertyCount', '') $a_SummaryInfo[0][0] = $o_SummaryInfo.PropertyCount ; add number of properties returned to array count (may differ from array rows) ; loop through summaryinfo properties and update the array with the values For $i = $MSI_SUMINFO_CODEPAGE To $MSI_SUMINFO_SECURITY If $i = $MSI_SUMINFO_THUMBNAIL Then ContinueLoop $a_SummaryInfo[$i][1] = $o_SummaryInfo.Property($i) Next _Log_ErrorRoute() ; remove this functions error route info Return $a_SummaryInfo ; return the array of properties Else Local $i_SummaryProperty = 0 ; split the properties string Local $a_Properties = StringSplit($i_Property, '|') ; lop through the properties For $i = 1 To $a_Properties[0] $i_SummaryProperty = Number($a_Properties[$i]) ; check that the requested property is valid (1 to 19) If $i_SummaryProperty > $MSI_SUMINFO_SECURITY Or $i_SummaryProperty < $MSI_SUMINFO_PROPERTIES Then ;Or $i_SummaryProperty = $MSI_SUMINFO_EditTime Or $i_SummaryProperty = $MSI_SUMINFO_Thumbnail Then $a_Properties[$i] = $i_SummaryProperty & ': Not a valid property PID' _Log_WriteError($a_Properties[$i]) Else ; add property to array If $i_SummaryProperty = $MSI_SUMINFO_PROPERTIES Then ; get the number of properties $a_Properties[$i] = $o_SummaryInfo.PropertyCount Else ; get the actual property __Msi_ErrorSetValues(183, '$o_SummaryInfo.Property', $i_SummaryProperty) $a_Properties[$i] = $o_SummaryInfo.Property($i_SummaryProperty) EndIf EndIf Next _Log_ErrorRoute() ; remove this functions error route info ; Return the property string If $a_Properties[0] = 1 Then Return SetError(0, __Msi_CloseDatabase(), $a_Properties[1]) ; Return the property array Return SetError(0, __Msi_CloseDatabase(), $a_Properties) EndIf EndIf EndIf Return SetError(1, _Log_ErrorRoute(), '') EndFunc ;==>_Msi_GetSummaryInfo Func _Msp_CollectUpdates($s_Destination = '') ; #### needs updating with errorroute #### Local $o_MyError = __MSI_ComErrorRegister() #forceref $o_MyError If Not $s_Destination Then $s_Destination = FileSelectFolder('Select a folder for the updates', '"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"') If @error Then Return _Log_WriteDebug('¦Collecting Updates...') ; set the error handler Local $o_MyError = __MSI_ComErrorRegister() #forceref $o_MyError Local Const $OFFICEID = '000-0000000FF1CE}' Local Const $PRODUCTCODE_EMPTY = '' Local Const $MACHINESID = '' Local Const $MSIINSTALLCONTEXT_MACHINE = 4 Local Const $MSIPATCHSTATE_APPLIED = 1 Local $i_UpdateCount = 0 __Msi_ErrorSetValues(221, '__MSI_CreateInstallerObject', '') Local $o_DataBase = __MSI_CreateInstallerObject() If Not @error Then __Msi_ErrorSetValues(225, '$o_DataBase.PatchesEx', $PRODUCTCODE_EMPTY & '#' & $MACHINESID & '#' & $MSIINSTALLCONTEXT_MACHINE & '#' & $MSIPATCHSTATE_APPLIED) Local $o_Patches = $o_DataBase.PatchesEx($PRODUCTCODE_EMPTY, $MACHINESID, $MSIINSTALLCONTEXT_MACHINE, $MSIPATCHSTATE_APPLIED) If Not @error Then Local _ $s_PatchFile = '', _ ; path to the office update $s_PatchCode = '', _ ; GUID of the patch $s_PatchCodeList = '', _ ; list of processed patch codes $s_DestFile = '' Local _ $as_Metadata = 0 ; array for the patch metadata For $o_Patch In $o_Patches __Msi_ErrorSetValues(238, '$o_Patch.PatchProperty', 'LocalPackage') $s_PatchFile = $o_Patch.PatchProperty('LocalPackage') ; Get the cached patch file used by the product. If Not @error Then If Not FileExists($s_PatchFile) Then ; missing file, log and skip _Log_WriteError($s_PatchFile & ' was not found in ' & StringRegExpReplace($s_PatchFile, "\\[^\\]*$", "")) ContinueLoop EndIf $s_PatchCode = _Msi_GetSummaryInfo($s_PatchFile, $MSI_SUMINFO_REVISIONNUMBER) If Not StringInStr($s_PatchCodeList, $s_PatchCode) And _ ; check file hasn't been processed StringInStr(_Msi_GetSummaryInfo($s_PatchFile, $MSI_SUMINFO_TEMPLATE), $OFFICEID) > 0 Then ; check file is an office update $as_Metadata = _MSI_GetMetaData($s_PatchFile) ; read the metadata table If Not IsArray($as_Metadata) Then ContinueLoop $s_DestFile = $s_Destination & '\' & $as_Metadata[$MSI_META_STDPACKAGENAME] If FileExists($s_DestFile) Then _Log_WriteWarning($as_Metadata[$MSI_META_STDPACKAGENAME] & ' ' & $as_Metadata[$MSI_META_DESCRIPTION] & _ '¦Overwriting¦' & _ $as_Metadata[$MSI_META_STDPACKAGENAME] & ' ' & _MSI_GetPropertyValues($s_DestFile, 'MsiPatchMetadata', 'Property,Value', 'Description')) EndIf $i_UpdateCount += FileCopy($s_PatchFile, $s_DestFile, $FC_OVERWRITE + $FC_CREATEPATH) ; copy the file, overwrite exisitng files FileSetAttrib($s_DestFile, '-R') ; remove read only attributes $s_PatchCodeList = $s_PatchCodeList & '|' & $s_PatchCode ; add the patchcode to the list of proessed updates EndIf EndIf Next EndIf EndIf MsgBox($MB_ICONINFORMATION, 'Finished', 'The update copy has completed') _Log_WriteDebug($i_UpdateCount & ' updates copied') Return SetError(_Log_GetFatalError(), __Msi_CloseDatabase(), $i_UpdateCount) EndFunc ;==>_Msp_CollectUpdates #Region #### Internal Functions ###################### Func __MSI_CreateInstallerObject() ; load the automation support that is required for COM to access the installer functions Local $o_MyError = __MSI_ComErrorRegister() #forceref $o_MyError __Msi_ErrorSetValues(279, 'ObjCreate', 'WindowsInstaller.Installer') Local $o_Installer = ObjCreate('WindowsInstaller.Installer') ; create a WindowsInstaller object If Not @error Then __Msi_ErrorSetValues(-1, -1, -1, -1, -1, -1, -1, $o_Installer) ; set the $o_Installer value for any future com errors Return SetError(_Log_GetFatalError(), 0, $o_Installer) ; EndFunc ;==>__MSI_CreateInstallerObject Func __Msi_OpenDatabase($s_FilePath) ; opens an existing database or creates a new one, returning a Database object. Local $o_MyError = __MSI_ComErrorRegister() #forceref $o_MyError Local _ $i_MsiOpenDatabaseModeReadOnly = 0, _ $i_MsiOpenDatabaseModePatchFile = 32, _ $i_OpenMode = $i_MsiOpenDatabaseModeReadOnly ; check for msp file extension and change the open mode for the database If StringRegExpReplace($s_FilePath, "^.*\.", ".$1") = '.msp' Then $i_OpenMode += $i_MsiOpenDatabaseModePatchFile _Log_ErrorRoute('add', 'MSI', 295, '__MSI_CreateInstallerObject', '') Local $o_Installer = __MSI_CreateInstallerObject() ; create a WindowsInstaller object If @error Then Return SetError(_Log_GetFatalError(), 0, 0) _Log_ErrorRoute() __Msi_ErrorSetValues(299, 'OpenDatabase', $s_FilePath & '#' & $i_OpenMode, $s_FilePath) Local $o_DataBase = $o_Installer.OpenDatabase($s_FilePath, $i_OpenMode) ; Open the MSI database Return SetError(_Log_GetFatalError(), _Log_ErrorRoute(), $o_DataBase) EndFunc ;==>__Msi_OpenDatabase Func __Msi_ViewOpen($o_DataBase, $s_Query) ; returns a View object that represents the query specified by a SQL string Local $o_MyError = __MSI_ComErrorRegister() #forceref $o_MyError __Msi_ErrorSetValues(305, 'Database.OpenView', $s_Query) ; update variables for future COM errors Local $o_View = $o_DataBase.OpenView($s_Query) Return SetError(_Log_GetFatalError(), 0, $o_View) EndFunc ;==>__Msi_ViewOpen Func __Msi_ViewExecute($o_View) Local $o_MyError = __MSI_ComErrorRegister() #forceref $o_MyError __Msi_ErrorSetValues(311, '$o_View.Execute', '') ; update variables for future COM errors $o_View.Execute() Return SetError(_Log_GetFatalError(), 0, 0) EndFunc ;==>__Msi_ViewExecute Func __Msi_ViewFetch($o_View) ; retrieves the next row of column data if more rows are available in the result set, Local $o_MyError = __MSI_ComErrorRegister() #forceref $o_MyError __Msi_ErrorSetValues(317, '$o_View.Fetch', '') ; update variables for future COM errors Local $v_Record = $o_View.Fetch() Return SetError(_Log_GetFatalError(), 0, $v_Record) EndFunc ;==>__Msi_ViewFetch Func __Msi_ViewClose($o_View) ; terminates query execution and releases database resources. Local $o_MyError = __MSI_ComErrorRegister() #forceref $o_MyError __Msi_ErrorSetValues(323, '$o_View.Close', '') ; update variables for future COM errors $o_View.Close Return SetError(_Log_GetFatalError(), 0, 0) EndFunc ;==>__Msi_ViewClose Func __Msi_CloseDatabase() ; clear the global error reporting values __Msi_ErrorSetValues('', '', '', '', '', '', '', '') EndFunc ;==>__Msi_CloseDatabase #EndRegion #### Internal Functions ###################### #Region #### Error Functions ######################### Func __MSI_ComErrorRegister() Return ObjEvent('AutoIt.Error', '__Msi_ErrorHandler') EndFunc ;==>__MSI_ComErrorRegister Func __Msi_ErrorValues($i_Index, $v_Value = '#') Local $i_Max = 9 Local Static $av_Error[$i_Max] = [$i_Max - 1] ; create an array for the variables If $v_Value = '#' Then Return $av_Error[$i_Index] ; return the stored value $av_Error[$i_Index] = $v_Value ; update the error EndFunc ;==>__Msi_ErrorValues Func __Msi_ErrorSetValues($i_Line = -1, $s_Func = -1, $v_Parameters = -1, $s_Msi = -1, $s_Table = -1, $s_Column = -1, $s_SqlQuery = -1, $o_Installer = -1) Local Enum _ $e_Line = 1, _ $e_Function, _ $e_Parameters, _ $e_Database, _ $e_TableName, _ $e_Column, _ $e_SQLQuery, _ $e_Installer If $i_Line <> -1 Then __Msi_ErrorValues($e_Line, $i_Line) If $s_Func <> -1 Then __Msi_ErrorValues($e_Function, $s_Func) If $v_Parameters <> -1 Then __Msi_ErrorValues($e_Parameters, $v_Parameters) If $s_Msi <> -1 Then __Msi_ErrorValues($e_Database, $s_Msi) If $s_Table <> -1 Then __Msi_ErrorValues($e_TableName, $s_Table) If $s_Column <> -1 Then __Msi_ErrorValues($e_Column, $s_Column) If $s_SqlQuery <> -1 Then __Msi_ErrorValues($e_SQLQuery, $s_SqlQuery) If $o_Installer <> -1 Then __Msi_ErrorValues($e_Installer, $o_Installer) EndFunc ;==>__Msi_ErrorSetValues Func __MSI_ErrorGetValues($s_VarName) Local Enum _ $e_Line = 1, _ $e_Function, _ $e_Parameters, _ $e_Database, _ $e_TableName, _ $e_Column, _ $e_SQLQuery, _ $e_Installer Local $i_Index = 0 Switch $s_VarName Case 'Line' $i_Index = $e_Line Case 'Function' $i_Index = $e_Function Case 'Parameters' $i_Index = $e_Parameters Case 'Database' $i_Index = $e_Database Case 'Table' $i_Index = $e_TableName Case 'Column' $i_Index = $e_Column Case 'SQLQuery' $i_Index = $e_SQLQuery Case 'Installer' $i_Index = $e_Installer Case Else Return EndSwitch Return __Msi_ErrorValues($i_Index) ; query the value EndFunc ;==>__MSI_ErrorGetValues Func __Msi_ErrorHandler() Local $o_Installer = __MSI_ErrorGetValues('Installer') ; get the installer object Local $s_ErrorCode = '2200' ; set default error for ObjCreate failure Local $s_ErrorMsg = '' If Not IsObj($o_Installer) Then $s_ErrorMsg = __Msi_ErrorCodeParser($s_ErrorCode) Else ; get the last error record object not all methods or properties return an error ; http://msdn.microsoft.com/en-gb/library/windows/desktop/aa369430%28v=vs.85%29.aspx Local $o_LastErrorRecord = $o_Installer.LastErrorRecord If Not IsObj($o_LastErrorRecord) Then ; no record object returned $s_ErrorMsg = 'Unable to get LastErrorRecord. Function may not generate an error record' ElseIf $o_LastErrorRecord.FormatText = '' Then $s_ErrorMsg = '$o_Installer LastErrorRecord was blank' Else $s_ErrorCode = StringMid($o_LastErrorRecord.FormatText, 4, 4) $s_ErrorMsg = __Msi_ErrorCodeParser($s_ErrorCode) EndIf EndIf _Log_ErrorRoute( _ 'write', _ 'MSI', _ ; UDP __MSI_ErrorGetValues('Line'), _ ; linenumber __MSI_ErrorGetValues('Function'), _ ; function name __MSI_ErrorGetValues('Parameters'), _ ; function parameters $s_ErrorCode, _ ; error code @extended, _ ; extended flag, probably 0 $s_ErrorMsg) ; message returned from __Msi_ErrorCodeParser() Return SetError(_Log_GetFatalError(), __Msi_CloseDatabase(), '') EndFunc ;==>__Msi_ErrorHandler Func __Msi_ErrorCodeParser($s_Code) Local $s_ReturnMsg = '' Switch $s_Code Case '1101' $s_ReturnMsg = 'Could not open file stream System error' Case '1259' $s_ReturnMsg = 'This error code only occurs when using Windows Installer version 2.0 and Windows XP or later If Windows Installer determines a product may be incompatible with the current operating system, it displays a dialog informing the user and asking whether to try to install anyway This error code is returned if the user chooses not to try the installation' Case '1301' $s_ReturnMsg = 'Cannot create the file. A directory with this name already exists' Case '1302' $s_ReturnMsg = 'Please insert the disk' Case '1303' $s_ReturnMsg = 'The Installer has insufficient privileges to access this directory' Case '1304' $s_ReturnMsg = 'Error Writing to File' Case '1305' $s_ReturnMsg = 'Error Reading from File; System error code' Case '1306' $s_ReturnMsg = 'The file is in use If you can, please close the application that is using the file, then click Retry' Case '1307' $s_ReturnMsg = 'There is not enough disk space remaining to install this file If you can, free up some disk space, and click Retry, or click Cancel to exit' Case '1308' $s_ReturnMsg = 'Source file not found' Case '1309' $s_ReturnMsg = 'Error attempting to open the source file System error code' Case '1310' $s_ReturnMsg = 'Error attempting to create the destination file System error code' Case '1311' $s_ReturnMsg = 'Could not locate source file cabinet' Case '1312' $s_ReturnMsg = 'Cannot create the directory A file with this name already exists Please rename or remove the file and click retry, or click Cancel to exit' Case '1313' $s_ReturnMsg = 'The volume is currently unavailable Please select another' Case '1314' $s_ReturnMsg = 'The specified path is unavailable' Case '1315' $s_ReturnMsg = 'Unable to write to the specified folder' Case '1316' $s_ReturnMsg = 'A network error occurred while attempting to read from the file' Case '1317' $s_ReturnMsg = 'An error occurred while attempting to create the directory' Case '1318' $s_ReturnMsg = 'A network error occurred while attempting to create the directory' Case '1319' $s_ReturnMsg = 'A network error occurred while attempting to open the source file cabinet' Case '1320' $s_ReturnMsg = 'The specified path is too long' Case '1321' $s_ReturnMsg = 'The Installer has insufficient privileges to modify this file' Case '1322' $s_ReturnMsg = 'A portion of the folder path is invalid It is either empty or exceeds the length allowed by the system' Case '1323' $s_ReturnMsg = 'The folder path contains words that are not valid in folder paths' Case '1324' $s_ReturnMsg = 'The folder path contains an invalid character' Case '1325' $s_ReturnMsg = 'File name is not a valid short file name' Case '1326' $s_ReturnMsg = 'Error getting file security GetLastError' Case '1327' $s_ReturnMsg = 'Invalid Drive' Case '1328' $s_ReturnMsg = 'Error applying patch to file It has probably been updated by other means, and can no longer be modified by this patch For more information contact your patch vendor System Error' Case '1329' $s_ReturnMsg = 'A file that is required cannot be installed because the cabinet file is not digitally signed This may indicate that the cabinet file is corrupt' Case '1330' $s_ReturnMsg = 'A file that is required cannot be installed because the cabinet file has an invalid digital signature This may indicate that the cabinet file is corrupt{ Error was returned by WinVerifyTrust}' Case '1331' $s_ReturnMsg = 'Failed to correctly copy file CRC error' Case '1332' $s_ReturnMsg = 'Failed to correctly move file CRC error' Case '1333' $s_ReturnMsg = 'Failed to correctly patch file CRC error' Case '1334' $s_ReturnMsg = 'The file cannot be installed because the file cannot be found in cabinet file This could indicate a network error, an error reading from the CD-ROM, or a problem with this package' Case '1335' $s_ReturnMsg = 'The cabinet file required for this installation is corrupt and cannot be used This could indicate a network error, an error reading from the CD-ROM, or a problem with this package' Case '1336' $s_ReturnMsg = 'There was an error creating a temporary file that is needed to complete this installation Folder System error code' Case '1401' $s_ReturnMsg = 'Could not create key System error' Case '1402' $s_ReturnMsg = 'Could not open key System error' Case '1403' $s_ReturnMsg = 'Could not delete value from key System error' Case '1404' $s_ReturnMsg = 'Could not delete key System error' Case '1405' $s_ReturnMsg = 'Could not read value from key System error' Case '1406' $s_ReturnMsg = 'Could not write value to key System error' Case '1407' $s_ReturnMsg = 'Could not get value names for key System error' Case '1408' $s_ReturnMsg = 'Could not get sub key names for key System error' Case '1409' $s_ReturnMsg = 'Could not read security information for key System error' Case '1410' $s_ReturnMsg = 'Could not increase the available registry space KB of free registry space is required for the installation of this application' Case '1500' $s_ReturnMsg = 'Another installation is in progress You must complete that installation before continuing this one' Case '1501' $s_ReturnMsg = 'Error accessing secured data Please make sure the Windows Installer is configured properly and try the install again' Case '1502' $s_ReturnMsg = 'User has previously initiated an install for product That user will need to run that install again before they can use that product Your current install will now continue' Case '1503' $s_ReturnMsg = 'User has previously initiated an install for product That user will need to run that install again before they can use that product' Case '1601' $s_ReturnMsg = 'The Windows Installer service could not be accessed Contact your support personnel to verify that the Windows Installer service is properly registered - OR - Out of disk space -- Volume; required space KB; available space KB' Case '1602' $s_ReturnMsg = 'User cancelled installation - OR - Are you sure you want to cancel?' Case '1603' $s_ReturnMsg = 'Fatal error during installation - OR - The fileis being held in use by another process Name' Case '1604' $s_ReturnMsg = 'Installation suspended, incomplete - OR - The product is already installed, and has prevented the installation of this product' Case '1605' $s_ReturnMsg = 'This action is only valid for products that are currently installed - OR - Out of disk space -- Volume; required space KB; available space KB If rollback is disabled, enough space is available Click Cancel to quit, Retry to check available disk space again, or Ignore to continue without rollback' Case '1606' $s_ReturnMsg = 'Feature ID not registered - OR - Could not access location' Case '1607' $s_ReturnMsg = 'Component ID not registered - OR - The following applications should be closed before continuing the install' Case '1608' $s_ReturnMsg = 'Unknown property - OR - Could not find any previously installed compliant products on the machine for installing this product' Case '1609' $s_ReturnMsg = 'An error occurred while applying security settings is not a valid user or group This could be a problem with the package, or a problem connecting to a domain controller on the network Check your network connection and click Retry, or Cancel to end the install Unable to locate the users SID, system error' Case '1610' $s_ReturnMsg = 'The configuration data for this product is corrupt Contact your support personnel' Case '1611' $s_ReturnMsg = 'Component qualifier not present' Case '1612' $s_ReturnMsg = 'The installation source for this product is not available Verify that the source exists and that you can access it' Case '1613' $s_ReturnMsg = 'This installation package cannot be installed by the Windows Installer service You must install a Windows service pack that contains a newer version of the Windows Installer service' Case '1614' $s_ReturnMsg = 'Product is uninstalled' Case '1615' $s_ReturnMsg = 'SQL query syntax invalid or unsupported' Case '1616' $s_ReturnMsg = 'Record field does not exist' Case '1618' $s_ReturnMsg = 'Another installation is already in progress Complete that installation before proceeding with this install' Case '1619' $s_ReturnMsg = 'This installation package could not be opened Verify that the package exists and that you can access it, or contact the application vendor to verify that this is a valid Windows Installer package' Case '1620' $s_ReturnMsg = 'This installation package could not be opened Contact the application vendor to verify that this is a valid Windows Installer package' Case '1621' $s_ReturnMsg = 'There was an error starting the Windows Installer service user interface Contact your support personnel' Case '1622' $s_ReturnMsg = 'Error opening installation log file Verify that the specified log file location exists and is writable' Case '1623' $s_ReturnMsg = 'This language of this installation package is not supported by your system' Case '1624' $s_ReturnMsg = 'Error applying transforms Verify that the specified transform paths are valid' Case '1625' $s_ReturnMsg = 'This installation is forbidden by system policy Contact your system administrator' Case '1626' $s_ReturnMsg = 'Function could not be executed' Case '1627' $s_ReturnMsg = 'Function failed during execution' Case '1628' $s_ReturnMsg = 'Invalid or unknown table specified (' & __MSI_ErrorGetValues('Table') & ')' Case '1629' $s_ReturnMsg = 'Data supplied is of wrong type' Case '1630' $s_ReturnMsg = 'Data of this type is not supported' Case '1631' $s_ReturnMsg = 'The Windows Installer service failed to start Contact your support personnel' Case '1632' $s_ReturnMsg = 'The temp folder is either full or inaccessible Verify that the temp folder exists and that you can write to it' Case '1633' $s_ReturnMsg = 'This installation package is not supported on this platform Contact your application vendor' Case '1634' $s_ReturnMsg = 'Component not used on this machine' Case '1635' $s_ReturnMsg = 'This patch package could not be opened Verify that the patch package exists and that you can access it, or contact the application vendor to verify that this is a valid Windows Installer patch package' Case '1636' $s_ReturnMsg = 'This patch package could not be opened Contact the application vendor to verify that this is a valid Windows Installer patch package' Case '1637' $s_ReturnMsg = 'This patch package cannot be processed by the Windows Installer service You must install a Windows service pack that contains a newer version of the Windows Installer service' Case '1638' $s_ReturnMsg = 'Another version of this product is already installed Installation of this version cannot continue To configure or remove the existing version of this product, use Add/Remove Programs on the Control Panel' Case '1639' $s_ReturnMsg = 'Invalid command line argument Consult the Windows Installer SDK for detailed command line help' Case '1640' $s_ReturnMsg = 'Installation from a Terminal Server client session not permitted for current user' Case '1641' $s_ReturnMsg = 'The installer has started a reboot This error code not available on Windows Installer version 10' Case '1642' $s_ReturnMsg = 'The installer cannot install the upgrade patch because the program being upgraded may be missing or the upgrade patch updates a different version of the program Verify that the program to be upgraded exists on your computer and that you have the correct upgrade patch' Case '1643' $s_ReturnMsg = 'The patch package is not permitted by system policy This error code is available with Windows Installer versions 20 or later' Case '1644' $s_ReturnMsg = 'One or more customizations are not permitted by system policy This error code is available with Windows Installer versions 20 or later' Case '1701' $s_ReturnMsg = 'is not a valid entry for a product ID' Case '1702' $s_ReturnMsg = 'Configuring cannot be completed until you restart your system To restart now and resume configuration click Yes, or click No to stop this configuration' Case '1703' $s_ReturnMsg = 'For the configuration changes made to to take effect you must restart your system To restart now click Yes, or click No if you plan to manually restart at a later time' Case '1704' $s_ReturnMsg = 'An install for is currently suspended You must undo the changes made by that install to continue Do you want to undo those changes?' Case '1705' $s_ReturnMsg = 'A previous install for this product is in progress You must undo the changes made by that install to continue Do you want to undo those changes?' Case '1706' $s_ReturnMsg = 'No valid source could be found for product' Case '1707' $s_ReturnMsg = 'Installation operation completed successfully' Case '1708' $s_ReturnMsg = 'Installation operation failed' Case '1709' $s_ReturnMsg = 'Product --' Case '1710' $s_ReturnMsg = 'You may either restore your computer to its previous state or continue the install later Would you like to restore?' Case '1711' $s_ReturnMsg = 'An error occurred while writing installation information to disk Check to make sure enough disk space is available, and click Retry, or Cancel to end the install' Case '1712' $s_ReturnMsg = 'One or more of the files required to restore your computer to its previous state could not be found Restoration will not be possible' Case '1713' $s_ReturnMsg = 'cannot install one of its required products Contact your technical support group System Error' Case '1714' $s_ReturnMsg = 'The older version of cannot be removed Contact your technical support group System Error' Case '1715' $s_ReturnMsg = 'Installed' Case '1716' $s_ReturnMsg = 'Configured' Case '1717' $s_ReturnMsg = 'Removed' Case '1718' $s_ReturnMsg = 'File was rejected by digital signature policy' Case '1719' $s_ReturnMsg = 'The Windows Installer Service could not be accessed Contact your support personnel to verify that it is properly registered and enabled' Case '1720' $s_ReturnMsg = 'There is a problem with this Windows Installer package A script required for this install to complete could not be run Contact your support personnel or package vendor Custom action script error' Case '1721' $s_ReturnMsg = 'There is a problem with this Windows Installer package A program required for this install to complete could not be run Contact your support personnel or package vendor Action, location, command' Case '1722' $s_ReturnMsg = 'There is a problem with this Windows Installer package A program run as part of the setup did not finish as expected Contact your support personnel or package vendor Action, location, command' Case '1723' $s_ReturnMsg = 'There is a problem with this Windows Installer package A DLL required for this install to complete could not be run Contact your support personnel or package vendor Action, entry, library' Case '1724' $s_ReturnMsg = 'Removal completed successfully' Case '1725' $s_ReturnMsg = 'Removal failed' Case '1726' $s_ReturnMsg = 'Advertisement completed successfully' Case '1727' $s_ReturnMsg = 'Advertisement failed' Case '1728' $s_ReturnMsg = 'Configuration completed successfully' Case '1729' $s_ReturnMsg = 'Configuration failed' Case '1730' $s_ReturnMsg = 'Removal failed' Case '1801' $s_ReturnMsg = 'The path is not valid' Case '1802' $s_ReturnMsg = 'Out of memory' Case '1803' $s_ReturnMsg = 'There is no disk in drive Please, insert one and hit Retry, or hit Cancel to go back to the previously selected volume' Case '1804' $s_ReturnMsg = 'There is no disk in drive Please, insert one and hit Retry, or hit Cancel to return to the browse dialog and select a different volume' Case '1805' $s_ReturnMsg = 'The path does not exist' Case '1806' $s_ReturnMsg = 'You have insufficient privileges to read this folder' Case '1807' $s_ReturnMsg = 'A valid destination folder for the install could not be determined' Case '1901' $s_ReturnMsg = 'Error attempting to read from the source install database' Case '1902' $s_ReturnMsg = 'Scheduling reboot operation Renaming file to Must reboot to complete operation' Case '1903' $s_ReturnMsg = 'Scheduling reboot operation Deleting file Must reboot to complete operation' Case '1904' $s_ReturnMsg = 'Module failed to register HRESULT' Case '1905' $s_ReturnMsg = 'Module failed to unregister HRESULT' Case '1906' $s_ReturnMsg = 'Failed to cache package Error' Case '1907' $s_ReturnMsg = 'Could not register font Verify that you that you have sufficient permissions to install fonts, and that the system supports this font' Case '1908' $s_ReturnMsg = 'Could not unregister font Verify that you that you have sufficient permissions to remove fonts' Case '1909' $s_ReturnMsg = 'Could not create Shortcut Verify that the destination folder exists and that you can access it' Case '1910' $s_ReturnMsg = 'Could not remove Shortcut Verify that the shortcut file exists and that you can access it' Case '1911' $s_ReturnMsg = 'Could not register type library for file Contact your support personnel' Case '1912' $s_ReturnMsg = 'Could not unregister type library for file Contact your support personnel' Case '1913' $s_ReturnMsg = 'Could not update the ini file. Verify that the file exists and that you can access it' Case '1914' $s_ReturnMsg = 'Could not schedule file to replace file on reboot Verify that you have write permissions to file' Case '1915' $s_ReturnMsg = 'Error removing ODBC driver manager, ODBC error Contact your support personnel' Case '1916' $s_ReturnMsg = 'Error installing ODBC driver manager, ODBC error Contact your support personnel' Case '1917' $s_ReturnMsg = 'Error removing ODBC driver, ODBC error Verify that you have sufficient privileges to remove ODBC drivers' Case '1918' $s_ReturnMsg = 'Error installing ODBC driver, ODBC error Verify that the file exists and that you can access it' Case '1919' $s_ReturnMsg = 'Error configuring ODBC data source, ODBC error Verify that the file exists and that you can access it' Case '1920' $s_ReturnMsg = 'Service failed to start Verify that you have sufficient privileges to start system services' Case '1921' $s_ReturnMsg = 'Service could not be stopped Verify that you have sufficient privileges to stop system services' Case '1922' $s_ReturnMsg = 'Service could not be deleted Verify that you have sufficient privileges to remove system services' Case '1923' $s_ReturnMsg = 'Service could not be installed Verify that you have sufficient privileges to install system services' Case '1924' $s_ReturnMsg = 'Could not update environment variable Verify that you have sufficient privileges to modify environment variables' Case '1925' $s_ReturnMsg = 'You do not have sufficient privileges to complete this installation for all users of the machine Log on as administrator and then retry this installation' Case '1926' $s_ReturnMsg = 'Could not set file security for file Error Verify that you have sufficient privileges to modify the security permissions for this file' Case '1927' $s_ReturnMsg = 'The installation requires COM+ Services to be installed' Case '1928' $s_ReturnMsg = 'The installation failed to install the COM+ Application' Case '1929' $s_ReturnMsg = 'The installation failed to remove the COM+ Application' Case '1930' $s_ReturnMsg = 'The description for service could not be changed' Case '1931' $s_ReturnMsg = 'The Windows Installer service cannot update the system file because the file is protected by Windows You may need to update your operating system for this program to work correctly Package version, OS Protected version' Case '1932' $s_ReturnMsg = 'The Windows Installer service cannot update the protected Windows file Package version, OS Protected version, SFP Error' Case '1933' $s_ReturnMsg = 'The Windows Installer service cannot update one or more protected Windows files SFP Error List of protected files' Case '1934' $s_ReturnMsg = 'User installations are disabled via policy on the machine' Case '1935' $s_ReturnMsg = 'An error occurred during the installation of assembly component' Case '2101' $s_ReturnMsg = 'Shortcuts not supported by the OS' Case '2102' $s_ReturnMsg = 'Invalid INI action' Case '2103' $s_ReturnMsg = 'Could not resolve path for shell folder' Case '2104' $s_ReturnMsg = 'Writing INI file System error' Case '2105' $s_ReturnMsg = 'Shortcut Creation Failed System error' Case '2106' $s_ReturnMsg = 'Shortcut Deletion Failed System error' Case '2107' $s_ReturnMsg = 'Error registering type library' Case '2108' $s_ReturnMsg = 'Error unregistering type library' Case '2109' $s_ReturnMsg = 'Section missing for INI action' Case '2110' $s_ReturnMsg = 'Key missing for INI action' Case '2111' $s_ReturnMsg = 'Detection of running apps failed, could not get perf data Reg operation returned ' Case '2112' $s_ReturnMsg = 'Detection of running apps failed, could not get perf indexReg operation returned ' Case '2113' $s_ReturnMsg = 'Detection of running apps failed' Case '2200' $s_ReturnMsg = 'Unable to create Installer object: ' & __MSI_ErrorGetValues('Parameters') Case '2201' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Initialization failed, out of memory' Case '2202' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Data access failed, out of memory' Case '2203' $s_ReturnMsg = 'Database: Cannot open ' & __MSI_ErrorGetValues('Database') & ' System error' Case '2204' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Table already exists (' & __MSI_ErrorGetValues('Table') & ')' Case '2205' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Table does not exist (' & __MSI_ErrorGetValues('Table') & ')' Case '2206' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Table could not be dropped (' & __MSI_ErrorGetValues('Table') & ')' Case '2207' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Intent violation' Case '2208' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Insufficient parameters for Execute' Case '2209' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Cursor in invalid state' Case '2210' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Invalid update data type in column (' & __MSI_ErrorGetValues('Column') & ')' Case '2211' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Could not create database table (' & __MSI_ErrorGetValues('Table') & ')' Case '2212' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' not in writable state' Case '2213' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Error saving database tables' Case '2214' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Error writing export file' Case '2215' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Cannot open import file' Case '2216' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Import file format error, Line' Case '2217' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Wrong state to CreateOutputDatabase' Case '2218' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Table name not supplied (' & __MSI_ErrorGetValues('Table') & ')' Case '2219' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Invalid Installer database format (' & __MSI_ErrorGetValues('Database') & ')' Case '2220' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Invalid row/field data' Case '2221' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Codepage conflict in import file' Case '2222' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Transform or merge codepage differs from database codepage' Case '2223' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Databases are the same No transform generated' Case '2224' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - GenerateTransform Database corrupt Table' Case '2225' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Transform Cannot transform a temporary table Table' Case '2226' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Transform failed' Case '2227' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Invalid identifier in SQL query (' & __MSI_ErrorGetValues('SQLQuery') & ')' Case '2228' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Unknown table (' & __MSI_ErrorGetValues('Table') & ') in SQL query (' & __MSI_ErrorGetValues('SQLQuery') & ')' Case '2229' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Could not load table (' & __MSI_ErrorGetValues('Table') & ') in SQL query (' & __MSI_ErrorGetValues('SQLQuery') & ')' Case '2230' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Repeated table (' & __MSI_ErrorGetValues('Table') & ') in SQL query (' & __MSI_ErrorGetValues('SQLQuery') & ')' Case '2231' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Missing in SQL query (' & __MSI_ErrorGetValues('SQLQuery') & ')' Case '2232' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Unexpected token in SQL query (' & __MSI_ErrorGetValues('SQLQuery') & ')' Case '2233' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - No columns in SELECT clause in SQL query (' & __MSI_ErrorGetValues('SQLQuery') & ')' Case '2234' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - No columns in ORDER BY clause in SQL query (' & __MSI_ErrorGetValues('SQLQuery') & ')' Case '2235' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Column (' & __MSI_ErrorGetValues('Column') & ') not present or ambiguous in SQL query (' & __MSI_ErrorGetValues('SQLQuery') & ')' Case '2236' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Invalid operator in SQL query (' & __MSI_ErrorGetValues('SQLQuery') & ')' Case '2237' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Invalid or missing query string (' & __MSI_ErrorGetValues('SQLQuery') & ')' Case '2238' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Missing FROM clause in SQL query (' & __MSI_ErrorGetValues('SQLQuery') & ')' Case '2239' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Insufficent values in INSERT SQL stmt (' & __MSI_ErrorGetValues('SQLQuery') & ')' Case '2240' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Missing update columns in UPDATE SQL stmt (' & __MSI_ErrorGetValues('SQLQuery') & ')' Case '2241' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Missing insert columns in INSERT SQL stmt (' & __MSI_ErrorGetValues('SQLQuery') & ')' Case '2242' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Column (' & __MSI_ErrorGetValues('Column') & ') repeated' Case '2243' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - No primary columns defined for table (' & __MSI_ErrorGetValues('Table') & ') creation' Case '2244' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Invalid type specifier in SQL query (' & __MSI_ErrorGetValues('SQLQuery') & ')' Case '2245' $s_ReturnMsg = 'IStorageStat failed with error' Case '2246' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Invalid Installer transform format' Case '2247' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Transform stream read/write failure' Case '2248' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - GenerateTransform/Merge Column type in base table doesnt match reference table' Case '2249' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - GenerateTransform More columns in base table than in reference table' Case '2250' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Transform Cannot add existing row' Case '2251' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Transform Cannot delete row that doesnt exist' Case '2252' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Transform Cannot add existing table (' & __MSI_ErrorGetValues('Table') & ')' Case '2253' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Transform Cannot delete table (' & __MSI_ErrorGetValues('Table') & ') that doesnt exist' Case '2254' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Transform Cannot update row that doesnt exist' Case '2255' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Transform Column with this name already exists' Case '2256' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - GenerateTransform/Merge Number of primary keys in base table (' & __MSI_ErrorGetValues('Table') & ') doesnt match reference table Table' Case '2257' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Intent to modify read only table (' & __MSI_ErrorGetValues('Table') & ')' Case '2258' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Type mismatch in parameter' Case '2259' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Table(s) Update failed' Case '2260' $s_ReturnMsg = 'Storage CopyTo failed System error' Case '2261' $s_ReturnMsg = 'Could not remove stream System error' Case '2262' $s_ReturnMsg = 'Stream does not exist System error' Case '2263' $s_ReturnMsg = 'Could not open stream System error' Case '2264' $s_ReturnMsg = 'Could not remove stream System error' Case '2265' $s_ReturnMsg = 'Could not commit storage System error' Case '2266' $s_ReturnMsg = 'Could not rollback storage System error' Case '2267' $s_ReturnMsg = 'Could not delete storage System error' Case '2268' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Merge There were merge conflicts reported in tables' Case '2269' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Merge The column count differed in the table of the two databases' Case '2270' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - GenerateTransform/Merge Column name in base table doesnt match reference table' Case '2271' $s_ReturnMsg = 'SummaryInformation write for transform failed' Case '2272' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - MergeDatabase will not write any changes because the database is open read-only' Case '2273' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - MergeDatabase A reference to the base database was passed as the reference database' Case '2274' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - MergeDatabase Unable to write errors to Error table Could be due to a non-nullable column in a predefined Error table' Case '2275' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Specified Modify operation invalid for table joins' Case '2276' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Codepage not supported by the system' Case '2277' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Failed to save table (' & __MSI_ErrorGetValues('Table') & ')' Case '2278' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Exceeded number of expressions limit of 32 in WHERE clause of SQL query' Case '2279' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Transform Too many columns in base table (' & __MSI_ErrorGetValues('Table') & ')' Case '2280' $s_ReturnMsg = 'Database: ' & __MSI_ErrorGetValues('Database') & ' - Could not create column (' & __MSI_ErrorGetValues('Column') & ')' & ' for table (' & __MSI_ErrorGetValues('Table') & ')' Case '2281' $s_ReturnMsg = 'Could not rename stream System error' Case '2282' $s_ReturnMsg = 'Stream name invalid' Case '2302' $s_ReturnMsg = 'Patch notify bytes patched to far' Case '2303' $s_ReturnMsg = 'Error getting volume info ' Case '2304' $s_ReturnMsg = 'Error getting disk free space Volume' Case '2305' $s_ReturnMsg = 'Error waiting for patch thread ' Case '2306' $s_ReturnMsg = 'Could not create thread for patch application ' Case '2307' $s_ReturnMsg = 'Source file key name is null' Case '2308' $s_ReturnMsg = 'Destination File Name is Null' Case '2309' $s_ReturnMsg = 'Attempting to patch file when patch already in progress' Case '2310' $s_ReturnMsg = 'Attempting to continue patch when no patch is in progress' Case '2315' $s_ReturnMsg = 'Missing Path Separator' Case '2318' $s_ReturnMsg = 'File does not exist' Case '2319' $s_ReturnMsg = 'Error setting file attribute' Case '2320' $s_ReturnMsg = 'File not writable' Case '2321' $s_ReturnMsg = 'Error creating file' Case '2322' $s_ReturnMsg = 'User cancelled' Case '2323' $s_ReturnMsg = 'Invalid File Attribute' Case '2324' $s_ReturnMsg = 'Could not open file' Case '2325' $s_ReturnMsg = 'Could not get file time for file' Case '2326' $s_ReturnMsg = 'Error in FileToDosDateTime' Case '2327' $s_ReturnMsg = 'Could not remove directory' Case '2328' $s_ReturnMsg = 'Error getting file version info for file' Case '2329' $s_ReturnMsg = 'Error deleting file' Case '2330' $s_ReturnMsg = 'Error getting file attributes' Case '2331' $s_ReturnMsg = 'Error loading library or finding entry point' Case '2332' $s_ReturnMsg = 'Error getting file attributes' Case '2333' $s_ReturnMsg = 'Error setting file attributes' Case '2334' $s_ReturnMsg = 'Error converting file time to local time for file' Case '2335' $s_ReturnMsg = 'Path is not a parent of' Case '2336' $s_ReturnMsg = 'Error creating temp file on path' Case '2337' $s_ReturnMsg = 'Could not close file' Case '2338' $s_ReturnMsg = 'Could not update resource for file' Case '2339' $s_ReturnMsg = 'Could not set file time for file' Case '2340' $s_ReturnMsg = 'Could not update resource for file, Missing Resource' Case '2341' $s_ReturnMsg = 'Could not update resource for file, Resource too large' Case '2342' $s_ReturnMsg = 'Could not update resource for file' Case '2343' $s_ReturnMsg = 'Specified path is empty' Case '2344' $s_ReturnMsg = 'Could not find required file IMAGEHLPDLL to validate file' Case '2345' $s_ReturnMsg = 'File does not contain a valid checksum value' Case '2347' $s_ReturnMsg = 'User Ignore' Case '2348' $s_ReturnMsg = 'Error attempting to read from cabinet stream' Case '2349' $s_ReturnMsg = 'Copy Resumed With Different Info' Case '2350' $s_ReturnMsg = 'FDI Server Error' Case '2351' $s_ReturnMsg = 'File key not found in cabinet The installation cannot continue' Case '2352' $s_ReturnMsg = 'Couldnt initialize cabinet file server The required file Cabinetdll may be missing' Case '2353' $s_ReturnMsg = 'Not a cabinet' Case '2354' $s_ReturnMsg = 'Cannot handle cabinet' Case '2355' $s_ReturnMsg = 'Corrupt cabinet' Case '2356' $s_ReturnMsg = 'Couldnt locate cabinet in stream' Case '2357' $s_ReturnMsg = 'Cannot set attributes' Case '2358' $s_ReturnMsg = 'Error determining whether file is in-use GetLastError' Case '2359' $s_ReturnMsg = 'Unable to create the target file - file may be in use' Case '2360' $s_ReturnMsg = 'progress tick' Case '2361' $s_ReturnMsg = 'Need next cabinet' Case '2362' $s_ReturnMsg = 'Folder not found' Case '2363' $s_ReturnMsg = 'Could not enumerate subfolders for folder' Case '2364' $s_ReturnMsg = 'Bad enumeration Local Constant in CreateCopier call' Case '2365' $s_ReturnMsg = 'Could not BindImage exe file' Case '2366' $s_ReturnMsg = 'User Failure' Case '2367' $s_ReturnMsg = 'User Abort' Case '2368' $s_ReturnMsg = 'Failed to get network resource information Error, network path Extended error network provider' Case '2371' $s_ReturnMsg = 'Could not apply patch to file GetLastError' Case '2372' $s_ReturnMsg = 'Patch file is corrupt or of an invalid format Attempting to patch file GetLastError' Case '2373' $s_ReturnMsg = 'File is not a valid patch file' Case '2374' $s_ReturnMsg = 'File is not a valid destination file for patch file' Case '2375' $s_ReturnMsg = 'Unknown patching error' Case '2376' $s_ReturnMsg = 'Cabinet not found' Case '2379' $s_ReturnMsg = 'Error opening file for read GetLastError' Case '2380' $s_ReturnMsg = 'Error opening file for write GetLastError' Case '2381' $s_ReturnMsg = 'Directory does not exist' Case '2382' $s_ReturnMsg = 'Drive not ready' Case '2501' $s_ReturnMsg = 'Could not create rollback script enumerator' Case '2502' $s_ReturnMsg = 'Called InstallFinalize when no install in progress' Case '2503' $s_ReturnMsg = 'Called RunScript when not marked in progress' Case '2601' $s_ReturnMsg = 'Invalid value for property' Case '2602' $s_ReturnMsg = 'The table entry has no associated entry in the Media table' Case '2603' $s_ReturnMsg = 'Duplicate Table Name (' & __MSI_ErrorGetValues('Table') & ')' Case '2604' $s_ReturnMsg = 'property undefined' Case '2605' $s_ReturnMsg = 'Could not find server in or' Case '2606' $s_ReturnMsg = 'Value of property is not a valid full path' Case '2607' $s_ReturnMsg = 'Media table not found or empty (required for installation of files)' Case '2608' $s_ReturnMsg = 'Could not create security descriptor for object Error' Case '2609' $s_ReturnMsg = 'Attempt to migrate product settings before initialization' Case '2611' $s_ReturnMsg = 'The file is marked as compressed, but the associated media entry does not specify a cabinet' Case '2612' $s_ReturnMsg = 'Stream not found in column Primary key' Case '2613' $s_ReturnMsg = 'RemoveExistingProducts action sequenced incorrectly' Case '2614' $s_ReturnMsg = 'Could not access IStorage object from installation package' Case '2615' $s_ReturnMsg = 'Skipped unregistration of Module due to source resolution failure' Case '2616' $s_ReturnMsg = 'Companion file parent missing' Case '2617' $s_ReturnMsg = 'Shared component not found in Component table' Case '2618' $s_ReturnMsg = 'Isolated application component not found in Component table' Case '2619' $s_ReturnMsg = 'Isolated components, not part of same feature' Case '2620' $s_ReturnMsg = 'Key file of isolated application component not in File table' Case '2701' $s_ReturnMsg = 'The Component Table exceeds the acceptable tree depth of levels' Case '2702' $s_ReturnMsg = 'A Feature Table record references a non-existent parent in the Attributes field' Case '2703' $s_ReturnMsg = 'Property name for root source path not defined' Case '2704' $s_ReturnMsg = 'Root directory property undefined' Case '2705' $s_ReturnMsg = 'Invalid table (' & __MSI_ErrorGetValues('Table') & '); Could not be linked as tree' Case '2706' $s_ReturnMsg = 'Source paths not created No path exists for entry in Directory Table' Case '2707' $s_ReturnMsg = 'Target paths not created No path exists for entry in Directory Table' Case '2708' $s_ReturnMsg = 'No entries found in the file table' Case '2709' $s_ReturnMsg = 'The specified Component name not found in Component Table' Case '2710' $s_ReturnMsg = 'The requested Select state is illegal for this Component' Case '2711' $s_ReturnMsg = 'The specified Feature name not found in Feature Table' Case '2712' $s_ReturnMsg = 'Invalid return from modeless dialog, in action' Case '2713' $s_ReturnMsg = 'Null value in a non-nullable column in column of the table (' & __MSI_ErrorGetValues('Table') & ') ' Case '2714' $s_ReturnMsg = 'Invalid value for default folder name' Case '2715' $s_ReturnMsg = 'The specified File key was not found in the File Table' Case '2716' $s_ReturnMsg = 'Couldnt create a random subcomponent name for component' Case '2717' $s_ReturnMsg = 'Bad action condition or error calling custom action' Case '2718' $s_ReturnMsg = 'Missing package name for product code' Case '2719' $s_ReturnMsg = 'Neither UNC nor drive letter path found in source' Case '2720' $s_ReturnMsg = 'Error opening sourcelist key Error' Case '2721' $s_ReturnMsg = 'Custom action not found in Binary table stream' Case '2722' $s_ReturnMsg = 'Custom action not found in File table' Case '2723' $s_ReturnMsg = 'Custom action specifies unsupported type' Case '2724' $s_ReturnMsg = 'The volume label on the media youre running from doesnt match the label given in the Media table This is allowed only if you have only 1 entry in your Media table' Case '2725' $s_ReturnMsg = 'Invalid database tables' Case '2726' $s_ReturnMsg = 'Action not found' Case '2727' $s_ReturnMsg = 'The directory entry does not exist in the Directory table' Case '2728' $s_ReturnMsg = 'Table (' & __MSI_ErrorGetValues('Table') & ') definition error' Case '2729' $s_ReturnMsg = 'Install engine not initialized' Case '2730' $s_ReturnMsg = 'Bad value in database Table (' & __MSI_ErrorGetValues('Table') & '); Primary key; Column' Case '2731' $s_ReturnMsg = 'Selection Manager not initialized' Case '2732' $s_ReturnMsg = 'Directory Manager not initialized' Case '2733' $s_ReturnMsg = 'Bad foreign key in column of the table (' & __MSI_ErrorGetValues('Table') & ')' Case '2734' $s_ReturnMsg = 'Invalid Reinstall mode character' Case '2735' $s_ReturnMsg = 'Custom action terminated prematurely' Case '2736' $s_ReturnMsg = 'Generation of custom action temp file failed' Case '2737' $s_ReturnMsg = 'Could not access custom action, entry, library' Case '2738' $s_ReturnMsg = 'Could not access VBScript runtime for custom action' Case '2739' $s_ReturnMsg = 'Could not access JavaScript runtime for custom action' Case '2740' $s_ReturnMsg = 'Custom action script error' Case '2741' $s_ReturnMsg = 'Configuration information for product is corrupt Invalid info' Case '2742' $s_ReturnMsg = 'Marshaling to Server failed' Case '2743' $s_ReturnMsg = 'Could not execute custom action, location, command' Case '2744' $s_ReturnMsg = 'EXE failed called by custom action, location, command' Case '2745' $s_ReturnMsg = 'Transform invalid for package Expected language, found language' Case '2746' $s_ReturnMsg = 'Transform invalid for package Expected product, found product' Case '2747' $s_ReturnMsg = 'Transform invalid for package Expected product version <, found product version' Case '2748' $s_ReturnMsg = 'Transform invalid for package Expected product version <=, found product version' Case '2749' $s_ReturnMsg = 'Transform invalid for package Expected product version ==, found product version' Case '2750' $s_ReturnMsg = 'Transform invalid for package Expected product version >=, found product version' Case '2751' $s_ReturnMsg = 'Transform invalid for package Expected product version >, found product version' Case '2752' $s_ReturnMsg = 'Could not open transform stored as child storage of package' Case '2753' $s_ReturnMsg = 'The File is not marked for installation' Case '2754' $s_ReturnMsg = 'The File is not a valid patch file' Case '2755' $s_ReturnMsg = 'Server returned unexpected error attempting to install package' Case '2756' $s_ReturnMsg = 'The property was used as a directory property in one or more tables, but no value was ever assigned' Case '2757' $s_ReturnMsg = 'Could not create summary info for transform' Case '2758' $s_ReturnMsg = 'Transform doesnt contain a MSI version' Case '2759' $s_ReturnMsg = 'Transform version incompatible with engine; Min, Max' Case '2760' $s_ReturnMsg = 'Transform invalid for package Expected upgrade code, found' Case '2761' $s_ReturnMsg = 'Cannot begin transaction Global mutex not properly initialized' Case '2762' $s_ReturnMsg = 'Cannot write script record Transaction not started' Case '2763' $s_ReturnMsg = 'Cannot run script Transaction not started' Case '2769' $s_ReturnMsg = 'Custom Action did not close MSIHANDLEs' Case '2801' $s_ReturnMsg = 'Unknown Message -- Type No action is taken' Case '2802' $s_ReturnMsg = 'No publisher is found for the event' Case '2803' $s_ReturnMsg = 'Dialog View did not find a record for the dialog' Case '2804' $s_ReturnMsg = 'On activation of the control on dialog CMsiDialog failed to evaluate the condition' Case '2805' $s_ReturnMsg = '' Case '2806' $s_ReturnMsg = 'The dialog failed to evaluate the condition' Case '2807' $s_ReturnMsg = 'The action is not recognized' Case '2808' $s_ReturnMsg = 'Default button is illdefined on dialog' Case '2809' $s_ReturnMsg = 'On the dialog the next control pointers do not form a cycleThere is a pointer from to, but there is no further pointer' Case '2810' $s_ReturnMsg = 'On the dialog the next control pointers do not form a cycleThere is a pointer from both and to' Case '2811' $s_ReturnMsg = 'On dialog control has to take focus, but it is unable to do so' Case '2812' $s_ReturnMsg = 'The event is not recognized' Case '2813' $s_ReturnMsg = 'The EndDialog event was called with the argument, but the dialog has a parent' Case '2814' $s_ReturnMsg = 'On the dialog the control names a non-existent control as the next control' Case '2815' $s_ReturnMsg = 'ControlCondition table has a row without condition for the dialog' Case '2816' $s_ReturnMsg = 'The EventMapping table refers to an invalid control on dialog for the event' Case '2817' $s_ReturnMsg = 'The event failed to set the attribute for the control on dialog' Case '2818' $s_ReturnMsg = 'In the ControlEvent table EndDialog has an unrecognized argument' Case '2819' $s_ReturnMsg = 'Control on dialog needs a property linked to it' Case '2820' $s_ReturnMsg = 'Attempted to initialize an already initialized handler' Case '2821' $s_ReturnMsg = 'Attempted to initialize an already initialized dialog' Case '2822' $s_ReturnMsg = 'No other method can be called on dialog untill all the controls are added' Case '2823' $s_ReturnMsg = 'Attempted to initialize an already initialized control on dialog' Case '2824' $s_ReturnMsg = 'The dialog attribute needs a record of at least field(s)' Case '2825' $s_ReturnMsg = 'The control attribute needs a record of at least field(s)' Case '2826' $s_ReturnMsg = 'Control on dialog extends beyond the boundaries of the dialog by pixels' Case '2827' $s_ReturnMsg = 'The button on the radiobutton group on dialog extends beyond the boundaries of the group by pixels' Case '2828' $s_ReturnMsg = 'Tried to remove control from dialog, but the control is not part of the dialog' Case '2829' $s_ReturnMsg = 'Attempt to use an uninitialized dialog' Case '2830' $s_ReturnMsg = 'Attempt to use an uninitialized control on dialog' Case '2831' $s_ReturnMsg = 'The control on dialog does not support the attribute' Case '2832' $s_ReturnMsg = 'The dialog does not support the attribute' Case '2833' $s_ReturnMsg = 'Control on dialog ignored the message' Case '2834' $s_ReturnMsg = 'The next pointers on the dialog do not form a single loop' Case '2835' $s_ReturnMsg = 'The control was not found on dialog' Case '2836' $s_ReturnMsg = 'The control on the dialog can not take focus' Case '2837' $s_ReturnMsg = 'The control on dialog wants the winproc to return' Case '2838' $s_ReturnMsg = 'The item in the selection table has itself as a parent' Case '2839' $s_ReturnMsg = 'Setting the property failed' Case '2840' $s_ReturnMsg = 'Error dialog name mismatch' Case '2841' $s_ReturnMsg = 'No OK button was found on the error dialog' Case '2842' $s_ReturnMsg = 'No text field was found on the error dialog' Case '2843' $s_ReturnMsg = 'The ErrorString attribute is not supported for standard dialogs' Case '2844' $s_ReturnMsg = 'Can not execute an error dialog if the errorstring is not set' Case '2845' $s_ReturnMsg = 'The total width of the buttons exceeds the size of the error dialog' Case '2846' $s_ReturnMsg = 'SetFocus did not find the required control on the error dialog' Case '2847' $s_ReturnMsg = 'The control on dialog has both the icon and the bitmap style set' Case '2848' $s_ReturnMsg = 'Tried to set control as the default button on dialog, but the control does not exist' Case '2849' $s_ReturnMsg = 'The control on dialog is of a type, that can not be integer valued' Case '2850' $s_ReturnMsg = 'Unrecognized volume type' Case '2851' $s_ReturnMsg = 'The data for the icon is not valid' Case '2852' $s_ReturnMsg = 'At least one control has to be added to dialog before it is used' Case '2853' $s_ReturnMsg = 'Dialog is a modeless dialog The execute method should not be called on it' Case '2854' $s_ReturnMsg = 'On the dialog the control is designated as first active control, but there is no such control' Case '2855' $s_ReturnMsg = 'The radiobutton group on dialog has fewer than 2 buttons' Case '2856' $s_ReturnMsg = 'Creating a second copy of the dialog' Case '2857' $s_ReturnMsg = 'The directory is mentioned in the selection table but not found' Case '2858' $s_ReturnMsg = 'The data for the bitmap is not valid' Case '2859' $s_ReturnMsg = 'Test error message' Case '2860' $s_ReturnMsg = 'Cancel button is illdefined on dialog' Case '2861' $s_ReturnMsg = 'The next pointers for the radiobuttons on dialog control do not form a cycle' Case '2862' $s_ReturnMsg = 'The attributes for the control on dialog do not define a valid icon size Setting the size to 16' Case '2863' $s_ReturnMsg = 'The control on dialog needs the icon in size, but that size is not available Loading the first available size' Case '2864' $s_ReturnMsg = 'The control on dialog received a browse event, but there is no configurable directory for the present selection Likely cause browse button is not authored correctly' Case '2865' $s_ReturnMsg = 'Control on billboard extends beyond the boundaries of the billboard by pixels' Case '2866' $s_ReturnMsg = 'The dialog is not allowed to return the argument' Case '2867' $s_ReturnMsg = 'The error dialog property is not set' Case '2868' $s_ReturnMsg = 'The error dialog does not have the error style bit set' Case '2869' $s_ReturnMsg = 'The dialog has the error style bit set, but is not an error dialog' Case '2870' $s_ReturnMsg = 'The help string for control on dialog does not contain the separator character' Case '2871' $s_ReturnMsg = 'The table is out of date' Case '2872' $s_ReturnMsg = 'The argument of the CheckPath control event on dialog is invalid' Case '2873' $s_ReturnMsg = 'On the dialog the control has an invalid string length limit' Case '2874' $s_ReturnMsg = 'Changing the text font to failed' Case '2875' $s_ReturnMsg = 'Changing the text color to failed' Case '2876' $s_ReturnMsg = 'The control on dialog had to truncate the string' Case '2877' $s_ReturnMsg = 'The binary data was not found' Case '2878' $s_ReturnMsg = 'On the dialog the control has a possible value This is an invalid or duplicate value' Case '2879' $s_ReturnMsg = 'The control on dialog can not parse the mask string' Case '2880' $s_ReturnMsg = 'Do not perform the remaining control events' Case '2881' $s_ReturnMsg = 'CMsiHandler initialization failed' Case '2882' $s_ReturnMsg = 'Dialog window class registration failed' Case '2883' $s_ReturnMsg = 'CreateNewDialog failed for the dialog' Case '2884' $s_ReturnMsg = 'Failed to create a window for the dialog!' Case '2885' $s_ReturnMsg = 'Failed to create the control on the dialog' Case '2886' $s_ReturnMsg = 'Creating the table (' & __MSI_ErrorGetValues('Table') & ') failed' Case '2887' $s_ReturnMsg = 'Creating a cursor to the table (' & __MSI_ErrorGetValues('Table') & ') failed' Case '2888' $s_ReturnMsg = 'Executing the view failed' Case '2889' $s_ReturnMsg = 'Creating the window for the control on dialog failed' Case '2890' $s_ReturnMsg = 'The handler failed in creating an unitialized dialog' Case '2891' $s_ReturnMsg = 'Failed to destroy window for dialog' Case '2892' $s_ReturnMsg = 'is an integer only control, is not a valid integer value' Case '2893' $s_ReturnMsg = 'The control on dialog can accept property values that are at most characters long The value exceeds this limit, and has been truncated' Case '2894' $s_ReturnMsg = 'Loading RichEd20dll failed GetLastError() returned' Case '2895' $s_ReturnMsg = 'Freeing RichEd20dll failed GetLastError() returned' Case '2896' $s_ReturnMsg = 'Executing action failed' Case '2897' $s_ReturnMsg = 'Failed to create any font on this system' Case '2898' $s_ReturnMsg = 'For textstyle, the system created a font, in character set' Case '2899' $s_ReturnMsg = 'Failed to create textstyle GetLastError() returned' Case '2901' $s_ReturnMsg = 'Invalid parameter to operation Parameter' Case '2902' $s_ReturnMsg = 'Operation called out of sequence' Case '2903' $s_ReturnMsg = 'The file is missing' Case '2904' $s_ReturnMsg = 'Could not BindImage file' Case '2905' $s_ReturnMsg = 'Could not read record from script file' Case '2906' $s_ReturnMsg = 'Missing header in script file' Case '2907' $s_ReturnMsg = 'Could not create secure security descriptor Error' Case '2908' $s_ReturnMsg = 'Could not register component' Case '2909' $s_ReturnMsg = 'Could not unregister component' Case '2910' $s_ReturnMsg = 'Could not determine users security id' Case '2911' $s_ReturnMsg = 'Could not remove the folder' Case '2912' $s_ReturnMsg = 'Could not schedule file for removal on reboot' Case '2919' $s_ReturnMsg = 'No cabinet specified for compressed file' Case '2920' $s_ReturnMsg = 'Source directory not specified for file' Case '2924' $s_ReturnMsg = 'Script version unsupported Script version, minimum version, maximum version' Case '2927' $s_ReturnMsg = 'ShellFolder id is invalid' Case '2928' $s_ReturnMsg = 'Exceeded maximum number of sources Skipping source' Case '2929' $s_ReturnMsg = 'Could not determine publishing root Error' Case '2932' $s_ReturnMsg = 'Could not create file from script data Error' Case '2933' $s_ReturnMsg = 'Could not initialize rollback script' Case '2934' $s_ReturnMsg = 'Could not secure transform Error' Case '2935' $s_ReturnMsg = 'Could not un-secure transform Error' Case '2936' $s_ReturnMsg = 'Could not find transform' Case '2937' $s_ReturnMsg = 'The Windows Installer cannot install a system file protection catalog Catalog, Error' Case '2938' $s_ReturnMsg = 'The Windows Installer cannot retrieve a system file protection catalog from the cache Catalog, Error' Case '2939' $s_ReturnMsg = 'The Windows Installer cannot delete a system file protection catalog from the cache Catalog, Error' Case '2940' $s_ReturnMsg = 'Directory Manager not supplied for source resolution' Case '2941' $s_ReturnMsg = 'Failed to check CRC for file' Case '2942' $s_ReturnMsg = 'BindImage action has not been executed on file' Case '2943' $s_ReturnMsg = 'This version of Windows does not support deploying 64-bit packages The script is for a 64-bit package' Case '3010' $s_ReturnMsg = 'A reboot is required to complete the install This does not include installs where the ForceReboot action is run' Case Else $s_ReturnMsg = 'Unknown error code: ' & $s_Code EndSwitch Return $s_ReturnMsg EndFunc ;==>__Msi_ErrorCodeParser #EndRegion #### Error Functions #########################