packages feed

bamse-0.9.4: Bamse/WindowsInstaller.hs

--------------------------------------------------------------------
-- |
-- Module      : Bamse.WindowsInstaller
-- Description : Haskell binding to the MSI COM object model
-- Copyright   : (c) Sigbjorn Finne, 2004-2009
-- License     : BSD3
--
-- Maintainer  : Sigbjorn Finne <sof@forkIO.com>
-- Stability   : provisional
-- Portability : portable
--
-- Haskell binding to the MSI COM object model
--------------------------------------------------------------------
module Bamse.WindowsInstaller where
-- 
-- Automatically generated by HaskellDirect (ihc.exe), version 0.18
-- Created: 11:52 Pacific Standard Time, Friday 16 November, 2001
-- Command line: --tlb -odir . d:/winnt/system32/msi.dll -v -dshow-passes -fno-export-list
--

import qualified Prelude
import qualified System.Win32.Com.Automation as Automation
                            (IDispatch, outString, inString, 
                             propertyGet, propertySet, method0, Variant, outVariant, inInt32, 
                             inVariant, outInt32, outIUnknown, function1, inEnum, outBool, 
                             outIDispatch, inDefaultValue, inIDispatch, outEnum, inBool, Date, 
                             outDate, SafeArray, outSafeArray)
import qualified System.Win32.Com as Com (LIBID, mkLIBID, IID, mkIID, IUnknown)
import qualified Data.Int (Int32)

libidWindowsInstaller :: Com.LIBID
libidWindowsInstaller =
  Com.mkLIBID "{000C1092-0000-0000-C000-000000000046}"

-- --------------------------------------------------
-- 
-- dispinterface UIPreview
-- 
-- --------------------------------------------------
data UIPreview_ a = UIPreview__
                      
type UIPreview a = Automation.IDispatch (UIPreview_ a)
iidUIPreview :: Com.IID (UIPreview ())
iidUIPreview = Com.mkIID "{000C109A-0000-0000-C000-000000000046}"

getProperty :: Prelude.String
            -> UIPreview a0
            -> Prelude.IO Prelude.String
getProperty name =
  Automation.propertyGet "Property"
                         [Automation.inString name]
                         Automation.outString

setProperty :: Prelude.String
            -> Prelude.String
            -> UIPreview a0
            -> Prelude.IO ()
setProperty name x0 =
  Automation.propertySet "Property"
                         [ Automation.inString name
                         , Automation.inString x0
                         ]

viewDialog :: Prelude.String
           -> UIPreview a0
           -> Prelude.IO ()
viewDialog dialog =
  Automation.method0 "ViewDialog"
                     [Automation.inString dialog]

viewBillboard :: Prelude.String
              -> Prelude.String
              -> UIPreview a0
              -> Prelude.IO ()
viewBillboard control billboard =
  Automation.method0 "ViewBillboard"
                     [ Automation.inString control
                     , Automation.inString billboard
                     ]

-- --------------------------------------------------
-- 
-- dispinterface SummaryInfo
-- 
-- --------------------------------------------------
data SummaryInfo_ a = SummaryInfo__
                        
type SummaryInfo a = Automation.IDispatch (SummaryInfo_ a)
iidSummaryInfo :: Com.IID (SummaryInfo ())
iidSummaryInfo = Com.mkIID "{000C109B-0000-0000-C000-000000000046}"

getProperty0 :: (Automation.Variant a1)
             => Data.Int.Int32
             -> SummaryInfo a0
             -> Prelude.IO a1
getProperty0 pid =
  Automation.propertyGet "Property"
                         [Automation.inInt32 pid]
                         Automation.outVariant

setProperty0 :: (Automation.Variant a1)
             => Data.Int.Int32
             -> a1
             -> SummaryInfo a0
             -> Prelude.IO ()
setProperty0 pid x0 =
  Automation.propertySet "Property"
                         [ Automation.inInt32 pid
                         , Automation.inVariant x0
                         ]

getPropertyCount :: SummaryInfo a0
                 -> Prelude.IO Data.Int.Int32
getPropertyCount =
  Automation.propertyGet "PropertyCount"
                         []
                         Automation.outInt32

persist :: SummaryInfo a0
        -> Prelude.IO ()
persist =
  Automation.method0 "Persist"
                     []

-- --------------------------------------------------
-- 
-- dispinterface StringList
-- 
-- --------------------------------------------------
data StringList_ a = StringList__
                       
type StringList a = Automation.IDispatch (StringList_ a)
iidStringList :: Com.IID (StringList ())
iidStringList = Com.mkIID "{000C1095-0000-0000-C000-000000000046}"

newEnum :: StringList a0
        -> Prelude.IO (Com.IUnknown ())
newEnum =
  Automation.function1 "_NewEnum"
                       []
                       Automation.outIUnknown

getItem :: Data.Int.Int32
        -> StringList a0
        -> Prelude.IO Prelude.String
getItem index =
  Automation.propertyGet "Item"
                         [Automation.inInt32 index]
                         Automation.outString

getCount :: StringList a0
         -> Prelude.IO Data.Int.Int32
getCount =
  Automation.propertyGet "Count"
                         []
                         Automation.outInt32

data MsiViewModify
 = MsiViewModifySeek
 | MsiViewModifyRefresh
 | MsiViewModifyInsert
 | MsiViewModifyUpdate
 | MsiViewModifyAssign
 | MsiViewModifyReplace
 | MsiViewModifyMerge
 | MsiViewModifyDelete
 | MsiViewModifyInsertTemporary
 | MsiViewModifyValidate
 | MsiViewModifyValidateNew
 | MsiViewModifyValidateField
 | MsiViewModifyValidateDelete
 
instance Prelude.Enum (MsiViewModify) where
  fromEnum v =
    case v of
       MsiViewModifySeek -> (-1)
       MsiViewModifyRefresh -> 0
       MsiViewModifyInsert -> 1
       MsiViewModifyUpdate -> 2
       MsiViewModifyAssign -> 3
       MsiViewModifyReplace -> 4
       MsiViewModifyMerge -> 5
       MsiViewModifyDelete -> 6
       MsiViewModifyInsertTemporary -> 7
       MsiViewModifyValidate -> 8
       MsiViewModifyValidateNew -> 9
       MsiViewModifyValidateField -> 10
       MsiViewModifyValidateDelete -> 11
  
  toEnum v =
    case v of
       (-1) -> MsiViewModifySeek
       0 -> MsiViewModifyRefresh
       1 -> MsiViewModifyInsert
       2 -> MsiViewModifyUpdate
       3 -> MsiViewModifyAssign
       4 -> MsiViewModifyReplace
       5 -> MsiViewModifyMerge
       6 -> MsiViewModifyDelete
       7 -> MsiViewModifyInsertTemporary
       8 -> MsiViewModifyValidate
       9 -> MsiViewModifyValidateNew
       10 -> MsiViewModifyValidateField
       11 -> MsiViewModifyValidateDelete
       _ -> Prelude.error "unmarshallMsiViewModify: illegal enum value "
  
data MsiUILevel
 = MsiUILevelNoChange
 | MsiUILevelDefault
 | MsiUILevelNone
 | MsiUILevelBasic
 | MsiUILevelReduced
 | MsiUILevelFull
 | MsiUILevelHideCancel
 | MsiUILevelProgressOnly
 | MsiUILevelEndDialog
 
instance Prelude.Enum (MsiUILevel) where
  fromEnum v =
    case v of
       MsiUILevelNoChange -> 0
       MsiUILevelDefault -> 1
       MsiUILevelNone -> 2
       MsiUILevelBasic -> 3
       MsiUILevelReduced -> 4
       MsiUILevelFull -> 5
       MsiUILevelHideCancel -> 32
       MsiUILevelProgressOnly -> 64
       MsiUILevelEndDialog -> 128
  
  toEnum v =
    case v of
       0 -> MsiUILevelNoChange
       1 -> MsiUILevelDefault
       2 -> MsiUILevelNone
       3 -> MsiUILevelBasic
       4 -> MsiUILevelReduced
       5 -> MsiUILevelFull
       32 -> MsiUILevelHideCancel
       64 -> MsiUILevelProgressOnly
       128 -> MsiUILevelEndDialog
       _ -> Prelude.error "unmarshallMsiUILevel: illegal enum value "
  
data MsiTransformValidation
 = MsiTransformValidationNone
 | MsiTransformValidationLanguage
 | MsiTransformValidationProduct
 | MsiTransformValidationPlatform
 | MsiTransformValidationMajorVer
 | MsiTransformValidationMinorVer
 | MsiTransformValidationUpdateVer
 | MsiTransformValidationLess
 | MsiTransformValidationLessOrEqual
 | MsiTransformValidationEqual
 | MsiTransformValidationGreaterOrEqual
 | MsiTransformValidationGreater
 | MsiTransformValidationUpgradeCode
 
instance Prelude.Enum (MsiTransformValidation) where
  fromEnum v =
    case v of
       MsiTransformValidationNone -> 0
       MsiTransformValidationLanguage -> 1
       MsiTransformValidationProduct -> 2
       MsiTransformValidationPlatform -> 4
       MsiTransformValidationMajorVer -> 8
       MsiTransformValidationMinorVer -> 16
       MsiTransformValidationUpdateVer -> 32
       MsiTransformValidationLess -> 64
       MsiTransformValidationLessOrEqual -> 128
       MsiTransformValidationEqual -> 256
       MsiTransformValidationGreaterOrEqual -> 512
       MsiTransformValidationGreater -> 1024
       MsiTransformValidationUpgradeCode -> 2048
  
  toEnum v =
    case v of
       0 -> MsiTransformValidationNone
       1 -> MsiTransformValidationLanguage
       2 -> MsiTransformValidationProduct
       4 -> MsiTransformValidationPlatform
       8 -> MsiTransformValidationMajorVer
       16 -> MsiTransformValidationMinorVer
       32 -> MsiTransformValidationUpdateVer
       64 -> MsiTransformValidationLess
       128 -> MsiTransformValidationLessOrEqual
       256 -> MsiTransformValidationEqual
       512 -> MsiTransformValidationGreaterOrEqual
       1024 -> MsiTransformValidationGreater
       2048 -> MsiTransformValidationUpgradeCode
       _ -> Prelude.error "unmarshallMsiTransformValidation: illegal enum value "
  
data MsiTransformError
 = MsiTransformErrorNone
 | MsiTransformErrorAddExistingRow
 | MsiTransformErrorDeleteNonExistingRow
 | MsiTransformErrorAddExistingTable
 | MsiTransformErrorDeleteNonExistingTable
 | MsiTransformErrorUpdateNonExistingRow
 | MsiTransformErrorChangeCodePage
 | MsiTransformErrorViewTransform
 
instance Prelude.Enum (MsiTransformError) where
  fromEnum v =
    case v of
       MsiTransformErrorNone -> 0
       MsiTransformErrorAddExistingRow -> 1
       MsiTransformErrorDeleteNonExistingRow -> 2
       MsiTransformErrorAddExistingTable -> 4
       MsiTransformErrorDeleteNonExistingTable -> 8
       MsiTransformErrorUpdateNonExistingRow -> 16
       MsiTransformErrorChangeCodePage -> 32
       MsiTransformErrorViewTransform -> 256
  
  toEnum v =
    case v of
       0 -> MsiTransformErrorNone
       1 -> MsiTransformErrorAddExistingRow
       2 -> MsiTransformErrorDeleteNonExistingRow
       4 -> MsiTransformErrorAddExistingTable
       8 -> MsiTransformErrorDeleteNonExistingTable
       16 -> MsiTransformErrorUpdateNonExistingRow
       32 -> MsiTransformErrorChangeCodePage
       256 -> MsiTransformErrorViewTransform
       _ -> Prelude.error "unmarshallMsiTransformError: illegal enum value "
  
data MsiSignatureOption = MsiSignatureOptionInvalidHashFatal
                            
instance Prelude.Enum (MsiSignatureOption) where
  fromEnum v =
    case v of
       MsiSignatureOptionInvalidHashFatal -> 1
  
  toEnum v =
    case v of
       1 -> MsiSignatureOptionInvalidHashFatal
       _ -> Prelude.error "unmarshallMsiSignatureOption: illegal enum value "
  
data MsiSignatureInfo
 = MsiSignatureInfoCertificate
 | MsiSignatureInfoHash
 deriving (Prelude.Enum)
data MsiRunMode
 = MsiRunModeAdmin
 | MsiRunModeAdvertise
 | MsiRunModeMaintenance
 | MsiRunModeRollbackEnabled
 | MsiRunModeLogEnabled
 | MsiRunModeOperations
 | MsiRunModeRebootAtEnd
 | MsiRunModeRebootNow
 | MsiRunModeCabinet
 | MsiRunModeSourceShortNames
 | MsiRunModeTargetShortNames
 | MsiRunModeWindows9x
 | MsiRunModeZawEnabled
 | MsiRunModeScheduled
 | MsiRunModeRollback
 | MsiRunModeCommit
 
instance Prelude.Enum (MsiRunMode) where
  fromEnum v =
    case v of
       MsiRunModeAdmin -> 0
       MsiRunModeAdvertise -> 1
       MsiRunModeMaintenance -> 2
       MsiRunModeRollbackEnabled -> 3
       MsiRunModeLogEnabled -> 4
       MsiRunModeOperations -> 5
       MsiRunModeRebootAtEnd -> 6
       MsiRunModeRebootNow -> 7
       MsiRunModeCabinet -> 8
       MsiRunModeSourceShortNames -> 9
       MsiRunModeTargetShortNames -> 10
       MsiRunModeWindows9x -> 12
       MsiRunModeZawEnabled -> 13
       MsiRunModeScheduled -> 16
       MsiRunModeRollback -> 17
       MsiRunModeCommit -> 18
  
  toEnum v =
    case v of
       0 -> MsiRunModeAdmin
       1 -> MsiRunModeAdvertise
       2 -> MsiRunModeMaintenance
       3 -> MsiRunModeRollbackEnabled
       4 -> MsiRunModeLogEnabled
       5 -> MsiRunModeOperations
       6 -> MsiRunModeRebootAtEnd
       7 -> MsiRunModeRebootNow
       8 -> MsiRunModeCabinet
       9 -> MsiRunModeSourceShortNames
       10 -> MsiRunModeTargetShortNames
       12 -> MsiRunModeWindows9x
       13 -> MsiRunModeZawEnabled
       16 -> MsiRunModeScheduled
       17 -> MsiRunModeRollback
       18 -> MsiRunModeCommit
       _ -> Prelude.error "unmarshallMsiRunMode: illegal enum value "
  
data MsiReinstallMode
 = MsiReinstallModeFileMissing
 | MsiReinstallModeFileOlderVersion
 | MsiReinstallModeFileEqualVersion
 | MsiReinstallModeFileExact
 | MsiReinstallModeFileVerify
 | MsiReinstallModeFileReplace
 | MsiReinstallModeMachineData
 | MsiReinstallModeUserData
 | MsiReinstallModeShortcut
 | MsiReinstallModePackage
 
instance Prelude.Enum (MsiReinstallMode) where
  fromEnum v =
    case v of
       MsiReinstallModeFileMissing -> 2
       MsiReinstallModeFileOlderVersion -> 4
       MsiReinstallModeFileEqualVersion -> 8
       MsiReinstallModeFileExact -> 16
       MsiReinstallModeFileVerify -> 32
       MsiReinstallModeFileReplace -> 64
       MsiReinstallModeMachineData -> 128
       MsiReinstallModeUserData -> 256
       MsiReinstallModeShortcut -> 512
       MsiReinstallModePackage -> 1024
  
  toEnum v =
    case v of
       2 -> MsiReinstallModeFileMissing
       4 -> MsiReinstallModeFileOlderVersion
       8 -> MsiReinstallModeFileEqualVersion
       16 -> MsiReinstallModeFileExact
       32 -> MsiReinstallModeFileVerify
       64 -> MsiReinstallModeFileReplace
       128 -> MsiReinstallModeMachineData
       256 -> MsiReinstallModeUserData
       512 -> MsiReinstallModeShortcut
       1024 -> MsiReinstallModePackage
       _ -> Prelude.error "unmarshallMsiReinstallMode: illegal enum value "
  
data MsiReadStream
 = MsiReadStreamInteger
 | MsiReadStreamBytes
 | MsiReadStreamAnsi
 | MsiReadStreamDirect
 deriving (Prelude.Enum)
-- --------------------------------------------------
-- 
-- dispinterface Record
-- 
-- --------------------------------------------------
data Record_ a = Record__
                   
type Record a = Automation.IDispatch (Record_ a)
iidRecord :: Com.IID (Record ())
iidRecord = Com.mkIID "{000C1093-0000-0000-C000-000000000046}"

getStringData :: Data.Int.Int32
              -> Record a0
              -> Prelude.IO Prelude.String
getStringData field =
  Automation.propertyGet "StringData"
                         [Automation.inInt32 field]
                         Automation.outString

setStringData :: Data.Int.Int32
              -> Prelude.String
              -> Record a0
              -> Prelude.IO ()
setStringData field x0 =
  Automation.propertySet "StringData"
                         [ Automation.inInt32 field
                         , Automation.inString x0
                         ]

getIntegerData :: Data.Int.Int32
               -> Record a0
               -> Prelude.IO Data.Int.Int32
getIntegerData field =
  Automation.propertyGet "IntegerData"
                         [Automation.inInt32 field]
                         Automation.outInt32

setIntegerData :: Data.Int.Int32
               -> Data.Int.Int32
               -> Record a0
               -> Prelude.IO ()
setIntegerData field x0 =
  Automation.propertySet "IntegerData"
                         [ Automation.inInt32 field
                         , Automation.inInt32 x0
                         ]

setStream :: Data.Int.Int32
          -> Prelude.String
          -> Record a0
          -> Prelude.IO ()
setStream field filePath =
  Automation.method0 "SetStream"
                     [ Automation.inInt32 field
                     , Automation.inString filePath
                     ]

readStream :: Data.Int.Int32
           -> Data.Int.Int32
           -> MsiReadStream
           -> Record a0
           -> Prelude.IO Prelude.String
readStream field length format =
  Automation.function1 "ReadStream"
                       [ Automation.inInt32 field
                       , Automation.inInt32 length
                       , Automation.inEnum format
                       ]
                       Automation.outString

getFieldCount :: Record a0
              -> Prelude.IO Data.Int.Int32
getFieldCount =
  Automation.propertyGet "FieldCount"
                         []
                         Automation.outInt32

getIsNull :: Data.Int.Int32
          -> Record a0
          -> Prelude.IO Prelude.Bool
getIsNull field =
  Automation.propertyGet "IsNull"
                         [Automation.inInt32 field]
                         Automation.outBool

getDataSize :: Data.Int.Int32
            -> Record a0
            -> Prelude.IO Data.Int.Int32
getDataSize field =
  Automation.propertyGet "DataSize"
                         [Automation.inInt32 field]
                         Automation.outInt32

clearData :: Record a0
          -> Prelude.IO ()
clearData =
  Automation.method0 "ClearData"
                     []

formatText :: Record a0
           -> Prelude.IO Prelude.String
formatText =
  Automation.function1 "FormatText"
                       []
                       Automation.outString

-- --------------------------------------------------
-- 
-- dispinterface RecordList
-- 
-- --------------------------------------------------
data RecordList_ a = RecordList__
                       
type RecordList a = Automation.IDispatch (RecordList_ a)
iidRecordList :: Com.IID (RecordList ())
iidRecordList = Com.mkIID "{000C1096-0000-0000-C000-000000000046}"

newEnum0 :: RecordList a0
         -> Prelude.IO (Com.IUnknown ())
newEnum0 =
  Automation.function1 "_NewEnum"
                       []
                       Automation.outIUnknown

getItem0 :: Data.Int.Int32
         -> RecordList a0
         -> Prelude.IO (Record ())
getItem0 index =
  Automation.propertyGet "Item"
                         [Automation.inInt32 index]
                         Automation.outIDispatch

getCount0 :: RecordList a0
          -> Prelude.IO Data.Int.Int32
getCount0 =
  Automation.propertyGet "Count"
                         []
                         Automation.outInt32

data MsiOpenDatabaseMode
 = MsiOpenDatabaseModeReadOnly
 | MsiOpenDatabaseModeTransact
 | MsiOpenDatabaseModeDirect
 | MsiOpenDatabaseModeCreate
 | MsiOpenDatabaseModeCreateDirect
 | MsiOpenDatabaseModePatchFile
 
instance Prelude.Enum (MsiOpenDatabaseMode) where
  fromEnum v =
    case v of
       MsiOpenDatabaseModeReadOnly -> 0
       MsiOpenDatabaseModeTransact -> 1
       MsiOpenDatabaseModeDirect -> 2
       MsiOpenDatabaseModeCreate -> 3
       MsiOpenDatabaseModeCreateDirect -> 4
       MsiOpenDatabaseModePatchFile -> 32
  
  toEnum v =
    case v of
       0 -> MsiOpenDatabaseModeReadOnly
       1 -> MsiOpenDatabaseModeTransact
       2 -> MsiOpenDatabaseModeDirect
       3 -> MsiOpenDatabaseModeCreate
       4 -> MsiOpenDatabaseModeCreateDirect
       32 -> MsiOpenDatabaseModePatchFile
       _ -> Prelude.error "unmarshallMsiOpenDatabaseMode: illegal enum value "
  
data MsiMessageType
 = MsiMessageTypeFatalExit
 | MsiMessageTypeOk
 | MsiMessageTypeDefault1
 | MsiMessageTypeOkCancel
 | MsiMessageTypeAbortRetryIgnore
 | MsiMessageTypeYesNoCancel
 | MsiMessageTypeYesNo
 | MsiMessageTypeRetryCancel
 | MsiMessageTypeDefault2
 | MsiMessageTypeDefault3
 | MsiMessageTypeError
 | MsiMessageTypeWarning
 | MsiMessageTypeUser
 | MsiMessageTypeInfo
 | MsiMessageTypeFilesInUse
 | MsiMessageTypeResolveSource
 | MsiMessageTypeOutOfDiskSpace
 | MsiMessageTypeActionStart
 | MsiMessageTypeActionData
 | MsiMessageTypeProgress
 | MsiMessageTypeCommonData
 
instance Prelude.Enum (MsiMessageType) where
  fromEnum v =
    case v of
       MsiMessageTypeFatalExit -> 0
       MsiMessageTypeOk -> 0
       MsiMessageTypeDefault1 -> 0
       MsiMessageTypeOkCancel -> 1
       MsiMessageTypeAbortRetryIgnore -> 2
       MsiMessageTypeYesNoCancel -> 3
       MsiMessageTypeYesNo -> 4
       MsiMessageTypeRetryCancel -> 5
       MsiMessageTypeDefault2 -> 256
       MsiMessageTypeDefault3 -> 512
       MsiMessageTypeError -> 16777216
       MsiMessageTypeWarning -> 33554432
       MsiMessageTypeUser -> 50331648
       MsiMessageTypeInfo -> 67108864
       MsiMessageTypeFilesInUse -> 83886080
       MsiMessageTypeResolveSource -> 100663296
       MsiMessageTypeOutOfDiskSpace -> 117440512
       MsiMessageTypeActionStart -> 134217728
       MsiMessageTypeActionData -> 150994944
       MsiMessageTypeProgress -> 167772160
       MsiMessageTypeCommonData -> 184549376
  
  toEnum v =
    case v of
       0 -> MsiMessageTypeOk
       0 -> MsiMessageTypeFatalExit
       0 -> MsiMessageTypeDefault1
       1 -> MsiMessageTypeOkCancel
       2 -> MsiMessageTypeAbortRetryIgnore
       3 -> MsiMessageTypeYesNoCancel
       4 -> MsiMessageTypeYesNo
       5 -> MsiMessageTypeRetryCancel
       256 -> MsiMessageTypeDefault2
       512 -> MsiMessageTypeDefault3
       16777216 -> MsiMessageTypeError
       33554432 -> MsiMessageTypeWarning
       50331648 -> MsiMessageTypeUser
       67108864 -> MsiMessageTypeInfo
       83886080 -> MsiMessageTypeFilesInUse
       100663296 -> MsiMessageTypeResolveSource
       117440512 -> MsiMessageTypeOutOfDiskSpace
       134217728 -> MsiMessageTypeActionStart
       150994944 -> MsiMessageTypeActionData
       167772160 -> MsiMessageTypeProgress
       184549376 -> MsiMessageTypeCommonData
       _ -> Prelude.error "unmarshallMsiMessageType: illegal enum value "
  
data MsiMessageStatus
 = MsiMessageStatusError
 | MsiMessageStatusNone
 | MsiMessageStatusOk
 | MsiMessageStatusCancel
 | MsiMessageStatusAbort
 | MsiMessageStatusRetry
 | MsiMessageStatusIgnore
 | MsiMessageStatusYes
 | MsiMessageStatusNo
 
instance Prelude.Enum (MsiMessageStatus) where
  fromEnum v =
    case v of
       MsiMessageStatusError -> (-1)
       MsiMessageStatusNone -> 0
       MsiMessageStatusOk -> 1
       MsiMessageStatusCancel -> 2
       MsiMessageStatusAbort -> 3
       MsiMessageStatusRetry -> 4
       MsiMessageStatusIgnore -> 5
       MsiMessageStatusYes -> 6
       MsiMessageStatusNo -> 7
  
  toEnum v =
    case v of
       (-1) -> MsiMessageStatusError
       0 -> MsiMessageStatusNone
       1 -> MsiMessageStatusOk
       2 -> MsiMessageStatusCancel
       3 -> MsiMessageStatusAbort
       4 -> MsiMessageStatusRetry
       5 -> MsiMessageStatusIgnore
       6 -> MsiMessageStatusYes
       7 -> MsiMessageStatusNo
       _ -> Prelude.error "unmarshallMsiMessageStatus: illegal enum value "
  
data MsiInstallType
 = MsiInstallTypeDefault
 | MsiInstallTypeNetworkImage
 deriving (Prelude.Enum)
data MsiInstallState
 = MsiInstallStateNotUsed
 | MsiInstallStateBadConfig
 | MsiInstallStateIncomplete
 | MsiInstallStateSourceAbsent
 | MsiInstallStateInvalidArg
 | MsiInstallStateUnknown
 | MsiInstallStateBroken
 | MsiInstallStateAdvertised
 | MsiInstallStateRemoved
 | MsiInstallStateAbsent
 | MsiInstallStateLocal
 | MsiInstallStateSource
 | MsiInstallStateDefault
 
instance Prelude.Enum (MsiInstallState) where
  fromEnum v =
    case v of
       MsiInstallStateNotUsed -> (-7)
       MsiInstallStateBadConfig -> (-6)
       MsiInstallStateIncomplete -> (-5)
       MsiInstallStateSourceAbsent -> (-4)
       MsiInstallStateInvalidArg -> (-2)
       MsiInstallStateUnknown -> (-1)
       MsiInstallStateBroken -> 0
       MsiInstallStateAdvertised -> 1
       MsiInstallStateRemoved -> 1
       MsiInstallStateAbsent -> 2
       MsiInstallStateLocal -> 3
       MsiInstallStateSource -> 4
       MsiInstallStateDefault -> 5
  
  toEnum v =
    case v of
       (-7) -> MsiInstallStateNotUsed
       (-6) -> MsiInstallStateBadConfig
       (-5) -> MsiInstallStateIncomplete
       (-4) -> MsiInstallStateSourceAbsent
       (-2) -> MsiInstallStateInvalidArg
       (-1) -> MsiInstallStateUnknown
       0 -> MsiInstallStateBroken
       1 -> MsiInstallStateAdvertised
       1 -> MsiInstallStateRemoved
       2 -> MsiInstallStateAbsent
       3 -> MsiInstallStateLocal
       4 -> MsiInstallStateSource
       5 -> MsiInstallStateDefault
       _ -> Prelude.error "unmarshallMsiInstallState: illegal enum value "
  
data MsiInstallMode
 = MsiInstallModeNoSourceResolution
 | MsiInstallModeNoDetection
 | MsiInstallModeExisting
 | MsiInstallModeDefault
 
instance Prelude.Enum (MsiInstallMode) where
  fromEnum v =
    case v of
       MsiInstallModeNoSourceResolution -> (-3)
       MsiInstallModeNoDetection -> (-2)
       MsiInstallModeExisting -> (-1)
       MsiInstallModeDefault -> 0
  
  toEnum v =
    case v of
       (-3) -> MsiInstallModeNoSourceResolution
       (-2) -> MsiInstallModeNoDetection
       (-1) -> MsiInstallModeExisting
       0 -> MsiInstallModeDefault
       _ -> Prelude.error "unmarshallMsiInstallMode: illegal enum value "
  
data MsiEvaluateCondition
 = MsiEvaluateConditionFalse
 | MsiEvaluateConditionTrue
 | MsiEvaluateConditionNone
 | MsiEvaluateConditionError
 deriving (Prelude.Enum)
data MsiDoActionStatus
 = MsiDoActionStatusNoAction
 | MsiDoActionStatusSuccess
 | MsiDoActionStatusUserExit
 | MsiDoActionStatusFailure
 | MsiDoActionStatusSuspend
 | MsiDoActionStatusFinished
 | MsiDoActionStatusWrongState
 | MsiDoActionStatusBadActionData
 deriving (Prelude.Enum)
data MsiDatabaseState
 = MsiDatabaseStateRead
 | MsiDatabaseStateWrite
 deriving (Prelude.Enum)
data MsiCostTree
 = MsiCostTreeSelfOnly
 | MsiCostTreeChildren
 | MsiCostTreeParents
 deriving (Prelude.Enum)
data MsiColumnInfo
 = MsiColumnInfoNames
 | MsiColumnInfoTypes
 deriving (Prelude.Enum)
-- --------------------------------------------------
-- 
-- dispinterface View
-- 
-- --------------------------------------------------
data View_ a = View__
                 
type View a = Automation.IDispatch (View_ a)
iidView :: Com.IID (View ())
iidView = Com.mkIID "{000C109C-0000-0000-C000-000000000046}"

execute :: (Automation.Variant a1)
        => a1
        -> View a0
        -> Prelude.IO ()
execute params =
  Automation.method0 "Execute"
                     [Automation.inDefaultValue (Automation.inInt32 0) Automation.inVariant params]

fetch :: View a0
      -> Prelude.IO (Record ())
fetch =
  Automation.function1 "Fetch"
                       []
                       Automation.outIDispatch

modify :: MsiViewModify
       -> Record a1
       -> View a0
       -> Prelude.IO ()
modify mode record =
  Automation.method0 "Modify"
                     [ Automation.inEnum mode
                     , Automation.inIDispatch record
                     ]

getColumnInfo :: MsiColumnInfo
              -> View a0
              -> Prelude.IO (Record ())
getColumnInfo info =
  Automation.propertyGet "ColumnInfo"
                         [Automation.inEnum info]
                         Automation.outIDispatch

close :: View a0
      -> Prelude.IO ()
close =
  Automation.method0 "Close"
                     []

getError :: View a0
         -> Prelude.IO Prelude.String
getError =
  Automation.function1 "GetError"
                       []
                       Automation.outString

-- --------------------------------------------------
-- 
-- dispinterface FeatureInfo
-- 
-- --------------------------------------------------
data FeatureInfo_ a = FeatureInfo__
                        
type FeatureInfo a = Automation.IDispatch (FeatureInfo_ a)
iidFeatureInfo :: Com.IID (FeatureInfo ())
iidFeatureInfo = Com.mkIID "{000C109F-0000-0000-C000-000000000046}"

getAttributes :: FeatureInfo a0
              -> Prelude.IO Data.Int.Int32
getAttributes =
  Automation.propertyGet "Attributes"
                         []
                         Automation.outInt32

setAttributes :: Data.Int.Int32
              -> FeatureInfo a0
              -> Prelude.IO ()
setAttributes prop =
  Automation.propertySet "Attributes"
                         [Automation.inInt32 prop]

getTitle :: FeatureInfo a0
         -> Prelude.IO Prelude.String
getTitle =
  Automation.propertyGet "Title"
                         []
                         Automation.outString

getDescription :: FeatureInfo a0
               -> Prelude.IO Prelude.String
getDescription =
  Automation.propertyGet "Description"
                         []
                         Automation.outString

-- --------------------------------------------------
-- 
-- dispinterface Database
-- 
-- --------------------------------------------------
data Database_ a = Database__
                     
type Database a = Automation.IDispatch (Database_ a)
iidDatabase :: Com.IID (Database ())
iidDatabase = Com.mkIID "{000C109D-0000-0000-C000-000000000046}"

getDatabaseState :: Database a0
                 -> Prelude.IO MsiDatabaseState
getDatabaseState =
  Automation.propertyGet "DatabaseState"
                         []
                         Automation.outEnum

getSummaryInformation :: (Automation.Variant a1)
                      => a1
                      -> Database a0
                      -> Prelude.IO (SummaryInfo ())
getSummaryInformation updateCount =
  Automation.propertyGet "SummaryInformation"
                         [Automation.inDefaultValue (Automation.inInt32 0) Automation.inVariant updateCount]
                         Automation.outIDispatch

openView :: Prelude.String
         -> Database a0
         -> Prelude.IO (View ())
openView sql =
  Automation.function1 "OpenView"
                       [Automation.inString sql]
                       Automation.outIDispatch

commit :: Database a0
       -> Prelude.IO ()
commit =
  Automation.method0 "Commit"
                     []

getPrimaryKeys :: Prelude.String
               -> Database a0
               -> Prelude.IO (Record ())
getPrimaryKeys table =
  Automation.propertyGet "PrimaryKeys"
                         [Automation.inString table]
                         Automation.outIDispatch

import0 :: Prelude.String
        -> Prelude.String
        -> Database a0
        -> Prelude.IO ()
import0 folder file =
  Automation.method0 "Import"
                     [ Automation.inString folder
                     , Automation.inString file
                     ]

export :: Prelude.String
       -> Prelude.String
       -> Prelude.String
       -> Database a0
       -> Prelude.IO ()
export table folder file =
  Automation.method0 "Export"
                     [ Automation.inString table
                     , Automation.inString folder
                     , Automation.inString file
                     ]

merge :: (Automation.Variant a2)
      => Database a1
      -> a2
      -> Database a0
      -> Prelude.IO Prelude.Bool
merge database errorTable =
  Automation.function1 "Merge"
                       [ Automation.inIDispatch database
                       , Automation.inDefaultValue (Automation.inVariant "0") Automation.inVariant errorTable
                       ]
                       Automation.outBool

generateTransform :: (Automation.Variant a2)
                  => Database a1
                  -> a2
                  -> Database a0
                  -> Prelude.IO Prelude.Bool
generateTransform referenceDatabase transformFile =
  Automation.function1 "GenerateTransform"
                       [ Automation.inIDispatch referenceDatabase
                       , Automation.inDefaultValue (Automation.inVariant "0") Automation.inVariant transformFile
                       ]
                       Automation.outBool

applyTransform :: Prelude.String
               -> MsiTransformError
               -> Database a0
               -> Prelude.IO ()
applyTransform transformFile errorConditions =
  Automation.method0 "ApplyTransform"
                     [ Automation.inString transformFile
                     , Automation.inEnum errorConditions
                     ]

enableUIPreview :: Database a0
                -> Prelude.IO (UIPreview ())
enableUIPreview =
  Automation.function1 "EnableUIPreview"
                       []
                       Automation.outIDispatch

getTablePersistent :: Prelude.String
                   -> Database a0
                   -> Prelude.IO MsiEvaluateCondition
getTablePersistent table =
  Automation.propertyGet "TablePersistent"
                         [Automation.inString table]
                         Automation.outEnum

createTransformSummaryInfo :: Database a1
                           -> Prelude.String
                           -> MsiTransformError
                           -> MsiTransformValidation
                           -> Database a0
                           -> Prelude.IO ()
createTransformSummaryInfo referenceDatabase transformFile errorConditions validation =
  Automation.method0 "CreateTransformSummaryInfo"
                     [ Automation.inIDispatch referenceDatabase
                     , Automation.inString transformFile
                     , Automation.inEnum errorConditions
                     , Automation.inEnum validation
                     ]

-- --------------------------------------------------
-- 
-- dispinterface Session
-- 
-- --------------------------------------------------
data Session_ a = Session__
                    
type Session a = Automation.IDispatch (Session_ a)
iidSession :: Com.IID (Session ())
iidSession = Com.mkIID "{000C109E-0000-0000-C000-000000000046}"

getInstaller :: Session a0
             -> Prelude.IO (Installer ())
getInstaller =
  Automation.propertyGet "Installer"
                         []
                         Automation.outIUnknown

getProperty1 :: Prelude.String
             -> Session a0
             -> Prelude.IO Prelude.String
getProperty1 name =
  Automation.propertyGet "Property"
                         [Automation.inString name]
                         Automation.outString

setProperty1 :: Prelude.String
             -> Prelude.String
             -> Session a0
             -> Prelude.IO ()
setProperty1 name x0 =
  Automation.propertySet "Property"
                         [ Automation.inString name
                         , Automation.inString x0
                         ]

getLanguage :: Session a0
            -> Prelude.IO Data.Int.Int32
getLanguage =
  Automation.propertyGet "Language"
                         []
                         Automation.outInt32

getMode :: MsiRunMode
        -> Session a0
        -> Prelude.IO Prelude.Bool
getMode flag =
  Automation.propertyGet "Mode"
                         [Automation.inEnum flag]
                         Automation.outBool

setMode :: MsiRunMode
        -> Prelude.Bool
        -> Session a0
        -> Prelude.IO ()
setMode flag x0 =
  Automation.propertySet "Mode"
                         [ Automation.inEnum flag
                         , Automation.inBool x0
                         ]

getDatabase :: Session a0
            -> Prelude.IO (Database ())
getDatabase =
  Automation.propertyGet "Database"
                         []
                         Automation.outIDispatch

getSourcePath :: Prelude.String
              -> Session a0
              -> Prelude.IO Prelude.String
getSourcePath folder =
  Automation.propertyGet "SourcePath"
                         [Automation.inString folder]
                         Automation.outString

getTargetPath :: Prelude.String
              -> Session a0
              -> Prelude.IO Prelude.String
getTargetPath folder =
  Automation.propertyGet "TargetPath"
                         [Automation.inString folder]
                         Automation.outString

setTargetPath :: Prelude.String
              -> Prelude.String
              -> Session a0
              -> Prelude.IO ()
setTargetPath folder x0 =
  Automation.propertySet "TargetPath"
                         [ Automation.inString folder
                         , Automation.inString x0
                         ]

doAction :: Prelude.String
         -> Session a0
         -> Prelude.IO MsiDoActionStatus
doAction action =
  Automation.function1 "DoAction"
                       [Automation.inString action]
                       Automation.outEnum

sequence :: (Automation.Variant a1)
         => Prelude.String
         -> a1
         -> Session a0
         -> Prelude.IO MsiDoActionStatus
sequence table mode =
  Automation.function1 "Sequence"
                       [ Automation.inString table
                       , Automation.inVariant mode
                       ]
                       Automation.outEnum

evaluateCondition :: Prelude.String
                  -> Session a0
                  -> Prelude.IO MsiEvaluateCondition
evaluateCondition expression =
  Automation.function1 "EvaluateCondition"
                       [Automation.inString expression]
                       Automation.outEnum

formatRecord :: Record a1
             -> Session a0
             -> Prelude.IO Prelude.String
formatRecord record =
  Automation.function1 "FormatRecord"
                       [Automation.inIDispatch record]
                       Automation.outString

message :: MsiMessageType
        -> Record a1
        -> Session a0
        -> Prelude.IO MsiMessageStatus
message kind record =
  Automation.function1 "Message"
                       [ Automation.inEnum kind
                       , Automation.inIDispatch record
                       ]
                       Automation.outEnum

getFeatureCurrentState :: Prelude.String
                       -> Session a0
                       -> Prelude.IO MsiInstallState
getFeatureCurrentState feature =
  Automation.propertyGet "FeatureCurrentState"
                         [Automation.inString feature]
                         Automation.outEnum

getFeatureRequestState :: Prelude.String
                       -> Session a0
                       -> Prelude.IO MsiInstallState
getFeatureRequestState feature =
  Automation.propertyGet "FeatureRequestState"
                         [Automation.inString feature]
                         Automation.outEnum

setFeatureRequestState :: Prelude.String
                       -> MsiInstallState
                       -> Session a0
                       -> Prelude.IO ()
setFeatureRequestState feature x0 =
  Automation.propertySet "FeatureRequestState"
                         [ Automation.inString feature
                         , Automation.inEnum x0
                         ]

getFeatureValidStates :: Prelude.String
                      -> Session a0
                      -> Prelude.IO Data.Int.Int32
getFeatureValidStates feature =
  Automation.propertyGet "FeatureValidStates"
                         [Automation.inString feature]
                         Automation.outInt32

getFeatureCost :: Prelude.String
               -> MsiCostTree
               -> MsiInstallState
               -> Session a0
               -> Prelude.IO Data.Int.Int32
getFeatureCost feature costTree state =
  Automation.propertyGet "FeatureCost"
                         [ Automation.inString feature
                         , Automation.inEnum costTree
                         , Automation.inEnum state
                         ]
                         Automation.outInt32

getComponentCurrentState :: Prelude.String
                         -> Session a0
                         -> Prelude.IO MsiInstallState
getComponentCurrentState component =
  Automation.propertyGet "ComponentCurrentState"
                         [Automation.inString component]
                         Automation.outEnum

getComponentRequestState :: Prelude.String
                         -> Session a0
                         -> Prelude.IO MsiInstallState
getComponentRequestState component =
  Automation.propertyGet "ComponentRequestState"
                         [Automation.inString component]
                         Automation.outEnum

setComponentRequestState :: Prelude.String
                         -> MsiInstallState
                         -> Session a0
                         -> Prelude.IO ()
setComponentRequestState component x0 =
  Automation.propertySet "ComponentRequestState"
                         [ Automation.inString component
                         , Automation.inEnum x0
                         ]

setInstallLevel :: Data.Int.Int32
                -> Session a0
                -> Prelude.IO ()
setInstallLevel level =
  Automation.method0 "SetInstallLevel"
                     [Automation.inInt32 level]

getVerifyDiskSpace :: Session a0
                   -> Prelude.IO Prelude.Bool
getVerifyDiskSpace =
  Automation.propertyGet "VerifyDiskSpace"
                         []
                         Automation.outBool

getProductProperty :: Prelude.String
                   -> Session a0
                   -> Prelude.IO Prelude.String
getProductProperty property =
  Automation.propertyGet "ProductProperty"
                         [Automation.inString property]
                         Automation.outString

getFeatureInfo :: Prelude.String
               -> Session a0
               -> Prelude.IO (FeatureInfo ())
getFeatureInfo feature =
  Automation.propertyGet "FeatureInfo"
                         [Automation.inString feature]
                         Automation.outIDispatch

getComponentCosts :: Prelude.String
                  -> MsiInstallState
                  -> Session a0
                  -> Prelude.IO (RecordList ())
getComponentCosts component state =
  Automation.propertyGet "ComponentCosts"
                         [ Automation.inString component
                         , Automation.inEnum state
                         ]
                         Automation.outIDispatch

-- --------------------------------------------------
-- 
-- dispinterface Installer
-- 
-- --------------------------------------------------
data Installer_ a = Installer__
                      
type Installer a = Automation.IDispatch (Installer_ a)
iidInstaller :: Com.IID (Installer ())
iidInstaller = Com.mkIID "{000C1090-0000-0000-C000-000000000046}"

getUILevel :: Installer a0
           -> Prelude.IO MsiUILevel
getUILevel =
  Automation.propertyGet "UILevel"
                         []
                         Automation.outEnum

setUILevel :: MsiUILevel
           -> Installer a0
           -> Prelude.IO ()
setUILevel prop =
  Automation.propertySet "UILevel"
                         [Automation.inEnum prop]

createRecord :: Data.Int.Int32
             -> Installer a0
             -> Prelude.IO (Record ())
createRecord count =
  Automation.function1 "CreateRecord"
                       [Automation.inInt32 count]
                       Automation.outIDispatch

openPackage :: (Automation.Variant a1)
            => a1
            -> Installer a0
            -> Prelude.IO (Session ())
openPackage packagePath =
  Automation.function1 "OpenPackage"
                       [Automation.inVariant packagePath]
                       Automation.outIDispatch

openProduct :: Prelude.String
            -> Installer a0
            -> Prelude.IO (Session ())
openProduct productCode =
  Automation.function1 "OpenProduct"
                       [Automation.inString productCode]
                       Automation.outIDispatch

openDatabase :: (Automation.Variant a1)
             => Prelude.String
             -> a1
             -> Installer a0
             -> Prelude.IO (Database ())
openDatabase databasePath openMode =
  Automation.function1 "OpenDatabase"
                       [ Automation.inString databasePath
                       , Automation.inVariant openMode
                       ]
                       Automation.outIDispatch

getSummaryInformation0 :: (Automation.Variant a1)
                       => Prelude.String
                       -> a1
                       -> Installer a0
                       -> Prelude.IO (SummaryInfo ())
getSummaryInformation0 packagePath updateCount =
  Automation.propertyGet "SummaryInformation"
                         [ Automation.inString packagePath
                         , Automation.inDefaultValue (Automation.inInt32 0) Automation.inVariant updateCount
                         ]
                         Automation.outIDispatch

enableLog :: Prelude.String
          -> Prelude.String
          -> Installer a0
          -> Prelude.IO ()
enableLog logMode logFile =
  Automation.method0 "EnableLog"
                     [ Automation.inString logMode
                     , Automation.inString logFile
                     ]

installProduct :: (Automation.Variant a1)
               => Prelude.String
               -> a1
               -> Installer a0
               -> Prelude.IO ()
installProduct packagePath propertyValues =
  Automation.method0 "InstallProduct"
                     [ Automation.inString packagePath
                     , Automation.inDefaultValue (Automation.inVariant "0") Automation.inVariant propertyValues
                     ]

getVersion :: Installer a0
           -> Prelude.IO Prelude.String
getVersion =
  Automation.propertyGet "Version"
                         []
                         Automation.outString

lastErrorRecord :: Installer a0
                -> Prelude.IO (Record ())
lastErrorRecord =
{- ToDo: look into why this was mis-classified as a function.
  Automation.function1 "LastErrorRecord"
                       []
                       Automation.outIDispatch
-}
  Automation.propertyGet "LastErrorRecord"
                         []
                         Automation.outIDispatch

registryValue :: (Automation.Variant a1, Automation.Variant a2)
              => a1
              -> Prelude.String
              -> a2
              -> Installer a0
              -> Prelude.IO Prelude.String
registryValue root key value =
  Automation.function1 "RegistryValue"
                       [ Automation.inVariant root
                       , Automation.inString key
                       , Automation.inVariant value
                       ]
                       Automation.outString

fileAttributes :: Prelude.String
               -> Installer a0
               -> Prelude.IO Data.Int.Int32
fileAttributes filePath =
  Automation.function1 "FileAttributes"
                       [Automation.inString filePath]
                       Automation.outInt32

fileSize :: Prelude.String
         -> Installer a0
         -> Prelude.IO Data.Int.Int32
fileSize filePath =
  Automation.function1 "FileSize"
                       [Automation.inString filePath]
                       Automation.outInt32

fileVersion :: (Automation.Variant a1)
            => Prelude.String
            -> a1
            -> Installer a0
            -> Prelude.IO Prelude.String
fileVersion filePath language =
  Automation.function1 "FileVersion"
                       [ Automation.inString filePath
                       , Automation.inVariant language
                       ]
                       Automation.outString

getEnvironment :: Prelude.String
               -> Installer a0
               -> Prelude.IO Prelude.String
getEnvironment variable =
  Automation.propertyGet "Environment"
                         [Automation.inString variable]
                         Automation.outString

setEnvironment :: Prelude.String
               -> Prelude.String
               -> Installer a0
               -> Prelude.IO ()
setEnvironment variable x0 =
  Automation.propertySet "Environment"
                         [ Automation.inString variable
                         , Automation.inString x0
                         ]

getProductState :: Prelude.String
                -> Installer a0
                -> Prelude.IO MsiInstallState
getProductState product =
  Automation.propertyGet "ProductState"
                         [Automation.inString product]
                         Automation.outEnum

getProductInfo :: Prelude.String
               -> Prelude.String
               -> Installer a0
               -> Prelude.IO Prelude.String
getProductInfo product attribute =
  Automation.propertyGet "ProductInfo"
                         [ Automation.inString product
                         , Automation.inString attribute
                         ]
                         Automation.outString

configureProduct :: Prelude.String
                 -> Data.Int.Int32
                 -> MsiInstallState
                 -> Installer a0
                 -> Prelude.IO ()
configureProduct product installLevel installState =
  Automation.method0 "ConfigureProduct"
                     [ Automation.inString product
                     , Automation.inInt32 installLevel
                     , Automation.inEnum installState
                     ]

reinstallProduct :: Prelude.String
                 -> MsiReinstallMode
                 -> Installer a0
                 -> Prelude.IO ()
reinstallProduct product reinstallMode =
  Automation.method0 "ReinstallProduct"
                     [ Automation.inString product
                     , Automation.inEnum reinstallMode
                     ]

collectUserInfo :: Prelude.String
                -> Installer a0
                -> Prelude.IO ()
collectUserInfo product =
  Automation.method0 "CollectUserInfo"
                     [Automation.inString product]

applyPatch :: Prelude.String
           -> Prelude.String
           -> MsiInstallType
           -> Prelude.String
           -> Installer a0
           -> Prelude.IO ()
applyPatch patchPackage installPackage installType commandLine =
  Automation.method0 "ApplyPatch"
                     [ Automation.inString patchPackage
                     , Automation.inString installPackage
                     , Automation.inEnum installType
                     , Automation.inString commandLine
                     ]

getFeatureParent :: Prelude.String
                 -> Prelude.String
                 -> Installer a0
                 -> Prelude.IO Prelude.String
getFeatureParent product feature =
  Automation.propertyGet "FeatureParent"
                         [ Automation.inString product
                         , Automation.inString feature
                         ]
                         Automation.outString

getFeatureState :: Prelude.String
                -> Prelude.String
                -> Installer a0
                -> Prelude.IO MsiInstallState
getFeatureState product feature =
  Automation.propertyGet "FeatureState"
                         [ Automation.inString product
                         , Automation.inString feature
                         ]
                         Automation.outEnum

useFeature :: Prelude.String
           -> Prelude.String
           -> MsiInstallMode
           -> Installer a0
           -> Prelude.IO ()
useFeature product feature installMode =
  Automation.method0 "UseFeature"
                     [ Automation.inString product
                     , Automation.inString feature
                     , Automation.inEnum installMode
                     ]

getFeatureUsageCount :: Prelude.String
                     -> Prelude.String
                     -> Installer a0
                     -> Prelude.IO Data.Int.Int32
getFeatureUsageCount product feature =
  Automation.propertyGet "FeatureUsageCount"
                         [ Automation.inString product
                         , Automation.inString feature
                         ]
                         Automation.outInt32

getFeatureUsageDate :: Prelude.String
                    -> Prelude.String
                    -> Installer a0
                    -> Prelude.IO Automation.Date
getFeatureUsageDate product feature =
  Automation.propertyGet "FeatureUsageDate"
                         [ Automation.inString product
                         , Automation.inString feature
                         ]
                         Automation.outDate

configureFeature :: Prelude.String
                 -> Prelude.String
                 -> MsiInstallState
                 -> Installer a0
                 -> Prelude.IO ()
configureFeature product feature installState =
  Automation.method0 "ConfigureFeature"
                     [ Automation.inString product
                     , Automation.inString feature
                     , Automation.inEnum installState
                     ]

reinstallFeature :: Prelude.String
                 -> Prelude.String
                 -> MsiReinstallMode
                 -> Installer a0
                 -> Prelude.IO ()
reinstallFeature product feature reinstallMode =
  Automation.method0 "ReinstallFeature"
                     [ Automation.inString product
                     , Automation.inString feature
                     , Automation.inEnum reinstallMode
                     ]

provideComponent :: Prelude.String
                 -> Prelude.String
                 -> Prelude.String
                 -> Data.Int.Int32
                 -> Installer a0
                 -> Prelude.IO Prelude.String
provideComponent product feature component installMode =
  Automation.function1 "ProvideComponent"
                       [ Automation.inString product
                       , Automation.inString feature
                       , Automation.inString component
                       , Automation.inInt32 installMode
                       ]
                       Automation.outString

getComponentPath :: Prelude.String
                 -> Prelude.String
                 -> Installer a0
                 -> Prelude.IO Prelude.String
getComponentPath product component =
  Automation.propertyGet "ComponentPath"
                         [ Automation.inString product
                         , Automation.inString component
                         ]
                         Automation.outString

provideQualifiedComponent :: Prelude.String
                          -> Prelude.String
                          -> Data.Int.Int32
                          -> Installer a0
                          -> Prelude.IO Prelude.String
provideQualifiedComponent category qualifier installMode =
  Automation.function1 "ProvideQualifiedComponent"
                       [ Automation.inString category
                       , Automation.inString qualifier
                       , Automation.inInt32 installMode
                       ]
                       Automation.outString

getQualifierDescription :: Prelude.String
                        -> Prelude.String
                        -> Installer a0
                        -> Prelude.IO Prelude.String
getQualifierDescription category qualifier =
  Automation.propertyGet "QualifierDescription"
                         [ Automation.inString category
                         , Automation.inString qualifier
                         ]
                         Automation.outString

getComponentQualifiers :: Prelude.String
                       -> Installer a0
                       -> Prelude.IO (StringList ())
getComponentQualifiers category =
  Automation.propertyGet "ComponentQualifiers"
                         [Automation.inString category]
                         Automation.outIDispatch

getProducts :: Installer a0
            -> Prelude.IO (StringList ())
getProducts =
  Automation.propertyGet "Products"
                         []
                         Automation.outIDispatch

getFeatures :: Prelude.String
            -> Installer a0
            -> Prelude.IO (StringList ())
getFeatures product =
  Automation.propertyGet "Features"
                         [Automation.inString product]
                         Automation.outIDispatch

getComponents :: Installer a0
              -> Prelude.IO (StringList ())
getComponents =
  Automation.propertyGet "Components"
                         []
                         Automation.outIDispatch

getComponentClients :: Prelude.String
                    -> Installer a0
                    -> Prelude.IO (StringList ())
getComponentClients component =
  Automation.propertyGet "ComponentClients"
                         [Automation.inString component]
                         Automation.outIDispatch

getPatches :: Prelude.String
           -> Installer a0
           -> Prelude.IO (StringList ())
getPatches product =
  Automation.propertyGet "Patches"
                         [Automation.inString product]
                         Automation.outIDispatch

getRelatedProducts :: Prelude.String
                   -> Installer a0
                   -> Prelude.IO (StringList ())
getRelatedProducts upgradeCode =
  Automation.propertyGet "RelatedProducts"
                         [Automation.inString upgradeCode]
                         Automation.outIDispatch

getPatchInfo :: Prelude.String
             -> Prelude.String
             -> Installer a0
             -> Prelude.IO Prelude.String
getPatchInfo patch attribute =
  Automation.propertyGet "PatchInfo"
                         [ Automation.inString patch
                         , Automation.inString attribute
                         ]
                         Automation.outString

getPatchTransforms :: Prelude.String
                   -> Prelude.String
                   -> Installer a0
                   -> Prelude.IO Prelude.String
getPatchTransforms product patch =
  Automation.propertyGet "PatchTransforms"
                         [ Automation.inString product
                         , Automation.inString patch
                         ]
                         Automation.outString

addSource :: Prelude.String
          -> Prelude.String
          -> Prelude.String
          -> Installer a0
          -> Prelude.IO ()
addSource product user source =
  Automation.method0 "AddSource"
                     [ Automation.inString product
                     , Automation.inString user
                     , Automation.inString source
                     ]

clearSourceList :: Prelude.String
                -> Prelude.String
                -> Installer a0
                -> Prelude.IO ()
clearSourceList product user =
  Automation.method0 "ClearSourceList"
                     [ Automation.inString product
                     , Automation.inString user
                     ]

forceSourceListResolution :: Prelude.String
                          -> Prelude.String
                          -> Installer a0
                          -> Prelude.IO ()
forceSourceListResolution product user =
  Automation.method0 "ForceSourceListResolution"
                     [ Automation.inString product
                     , Automation.inString user
                     ]

getGetShortcutTarget :: Prelude.String
                     -> Installer a0
                     -> Prelude.IO (Record ())
getGetShortcutTarget shortcutPath =
  Automation.propertyGet "GetShortcutTarget"
                         [Automation.inString shortcutPath]
                         Automation.outIDispatch

fileHash :: Prelude.String
         -> Data.Int.Int32
         -> Installer a0
         -> Prelude.IO (Record ())
fileHash filePath options =
  Automation.function1 "FileHash"
                       [ Automation.inString filePath
                       , Automation.inInt32 options
                       ]
                       Automation.outIDispatch

fileSignatureInfo :: Prelude.String
                  -> Data.Int.Int32
                  -> MsiSignatureInfo
                  -> Installer a0
                  -> Prelude.IO (Automation.SafeArray Prelude.Char)
fileSignatureInfo filePath options format =
  Automation.function1 "FileSignatureInfo"
                       [ Automation.inString filePath
                       , Automation.inInt32 options
                       , Automation.inEnum format
                       ]
                       Automation.outSafeArray

data Constants = MsiDatabaseNullInteger
                   
instance Prelude.Enum (Constants) where
  fromEnum v =
    case v of
       MsiDatabaseNullInteger -> (-2147483648)
  
  toEnum v =
    case v of
       (-2147483648) -> MsiDatabaseNullInteger
       _ -> Prelude.error "unmarshallConstants: illegal enum value "