/* * Copyright (C) 2007 Mike McCormack * Copyright (C) 2007 Misha Koshelev * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "msiserver_dispids.h" import "unknwn.idl"; import "wtypes.idl"; import "objidl.idl"; import "oaidl.idl"; cpp_quote("#if 0") typedef unsigned long MSIHANDLE; typedef int INSTALLMESSAGE; typedef int MSICONDITION; typedef int MSIRUNMODE; typedef int INSTALLSTATE; cpp_quote("#endif") [ uuid(7BDE2046-D03B-4ffc-B84C-A098F38CFF0B), oleautomation, object ] interface IWineMsiRemoteDatabase : IUnknown { HRESULT IsTablePersistent( [in] LPCWSTR table, [out] MSICONDITION *persistent ); HRESULT GetPrimaryKeys( [in] LPCWSTR table, [out] MSIHANDLE *keys ); HRESULT GetSummaryInformation( [in] UINT updatecount, [out] MSIHANDLE *suminfo ); HRESULT OpenView( [in] LPCWSTR query, [out] MSIHANDLE *view ); HRESULT SetMsiHandle( [in] MSIHANDLE handle ); } [ uuid(902B3592-9D08-4dfd-A593-D07C52546421), oleautomation, object ] interface IWineMsiRemotePackage : IUnknown { HRESULT SetMsiHandle( [in] MSIHANDLE handle ); HRESULT GetActiveDatabase( [out] MSIHANDLE *handle ); HRESULT GetProperty( [in] BSTR property, [out] BSTR *value, [out] DWORD *size ); HRESULT SetProperty( [in] BSTR property, [in] BSTR value ); HRESULT ProcessMessage( [in] INSTALLMESSAGE message, [in] MSIHANDLE record ); HRESULT DoAction( [in] BSTR action ); HRESULT Sequence( [in] BSTR table, [in] int sequence ); HRESULT GetTargetPath( [in] BSTR folder, [out] BSTR *value, [out] DWORD *size ); HRESULT SetTargetPath( [in] BSTR folder, [in] BSTR value ); HRESULT GetSourcePath( [in] BSTR folder, [out] BSTR *value, [out] DWORD *size ); HRESULT GetMode( [in] MSIRUNMODE mode, [out] BOOL *ret ); HRESULT SetMode( [in] MSIRUNMODE mode, [in] BOOL state ); HRESULT GetFeatureState( [in] BSTR feature, [out] INSTALLSTATE *installed, [out] INSTALLSTATE *action ); HRESULT SetFeatureState( [in] BSTR feature, [in] INSTALLSTATE state ); HRESULT GetComponentState( [in] BSTR component, [out] INSTALLSTATE *installed, [out] INSTALLSTATE *action ); HRESULT SetComponentState( [in] BSTR component, [in] INSTALLSTATE state ); HRESULT GetLanguage( [out] LANGID *language ); HRESULT SetInstallLevel( [in] int level ); HRESULT FormatRecord( [in] MSIHANDLE record, [out] BSTR *value ); HRESULT EvaluateCondition( [in] BSTR condition ); HRESULT GetFeatureCost( [in] BSTR feature, [in] INT cost_tree, [in] INSTALLSTATE state, [out] INT *cost); } [ uuid(56D58B64-8780-4c22-A8BC-8B0B29E4A9F8), oleautomation, object ] interface IWineMsiRemoteCustomAction : IUnknown { HRESULT GetActionInfo( [in] LPCGUID guid, [out] INT *type, [out] MSIHANDLE *handle, [out] BSTR *dllname, [out] BSTR *function, [out] IWineMsiRemotePackage **package ); } [ uuid(000C1092-0000-0000-C000-000000000046), version(1.0) ] library WindowsInstaller { dispinterface Installer; dispinterface Record; dispinterface Session; dispinterface Database; dispinterface SummaryInfo; dispinterface View; dispinterface UIPreview; dispinterface FeatureInfo; dispinterface RecordList; dispinterface StringList; dispinterface Product; dispinterface Patch; typedef enum { 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 } MsiInstallState; typedef enum { msiOpenDatabaseModeReadOnly = 0, msiOpenDatabaseModeTransact = 1, msiOpenDatabaseModeDirect = 2, msiOpenDatabaseModeCreate = 3, msiOpenDatabaseModeCreateDirect = 4, msiOpenDatabaseModePatchFile = 32 } MsiOpenDatabaseMode; typedef enum { msiUILevelNoChange = 0, msiUILevelDefault = 1, msiUILevelNone = 2, msiUILevelBasic = 3, msiUILevelReduced = 4, msiUILevelFull = 5, msiUILevelHideCancel = 32, msiUILevelProgressOnly = 64, msiUILevelEndDialog = 128, msiUILevelSourceResOnly = 256 } MsiUILevel; [ uuid(000C1090-0000-0000-C000-000000000046) ] dispinterface Installer { properties: [id(DISPID_INSTALLER_UILEVEL)] MsiUILevel UILevel; methods: [id(DISPID_INSTALLER_CREATERECORD)] Record *CreateRecord([in] long Count); [id(DISPID_INSTALLER_OPENPACKAGE)] Session* OpenPackage( [in] VARIANT PackagePath, [in, optional, defaultvalue(0)] long Options); [id(DISPID_INSTALLER_OPENPRODUCT)] Session* OpenProduct( [in] BSTR ProductCode); [id(DISPID_INSTALLER_SUMMARYINFORMATION)] SummaryInfo* SummaryInformation( [in] BSTR PackagePath, [in, optional, defaultvalue(0)] long UpdateCount); [id(DISPID_INSTALLER_OPENDATABASE)] Database *OpenDatabase( [in] BSTR DatabasePath, [in] VARIANT OpenMode); [id(DISPID_INSTALLER_ENABLELOG)] void EnableLog( [in] BSTR LogMode, [in] BSTR LogFile); [id(DISPID_INSTALLER_INSTALLPRODUCT)] void InstallProduct( [in] BSTR PackagePath, [in, optional, defaultvalue("0")] BSTR PropertyValues); [id(DISPID_INSTALLER_VERSION)] BSTR Version(); [id(DISPID_INSTALLER_LASTERRORRECORD)] Record* LastErrorRecord(); [id(DISPID_INSTALLER_REGISTRYVALUE), propget] BSTR RegistryValue( [in] VARIANT Root, [in] BSTR Key, [in, optional] VARIANT Value); [id(DISPID_INSTALLER_ENVIRONMENT), propget] BSTR Environment([in] BSTR Variable); [id(DISPID_INSTALLER_ENVIRONMENT), propput] void Environment( [in] BSTR Variable, [in] BSTR rhs); [id(DISPID_INSTALLER_FILEATTRIBUTES)] long FileAttributes([in] BSTR FilePath); [id(DISPID_INSTALLER_FILESIZE)] long FileSize([in] BSTR FilePath); [id(DISPID_INSTALLER_FILEVERSION)] BSTR FileVersion( [in] BSTR FilePath, [in, optional] VARIANT Language); [id(DISPID_INSTALLER_PRODUCTSTATE), propget] MsiInstallState ProductState( [in] BSTR Product); [id(DISPID_INSTALLER_PRODUCTINFO), propget] BSTR ProductInfo( [in] BSTR Product, [in] BSTR Attribute); [id(DISPID_INSTALLER_PRODUCTS), propget] StringList *Products(); [id(DISPID_INSTALLER_RELATEDPRODUCTS), propget] StringList *RelatedProducts( [in] BSTR UpgradeCode); } [ uuid(000C1093-0000-0000-C000-000000000046) ] dispinterface Record { properties: methods: [id(DISPID_RECORD_STRINGDATA), propget] BSTR StringData([in] long Field); [id(DISPID_RECORD_STRINGDATA), propput] void StringData( [in] long Field, [in] BSTR rhs); [id(DISPID_RECORD_INTEGERDATA), propget] long IntegerData([in] long Field); [id(DISPID_RECORD_INTEGERDATA), propput] void IntegerData( [in] long Field, [in] long rhs); [id(DISPID_RECORD_FIELDCOUNT), propget] long FieldCount(); } [ uuid(000C1095-0000-0000-C000-000000000046) ] dispinterface StringList { properties: methods: [id(DISPID_LIST__NEWENUM)] IUnknown _NewEnum(); [id(DISPID_LIST_ITEM), propget] BSTR Item(long Index); [id(DISPID_LIST_COUNT), propget] long Count(); } [ uuid(000C1096-0000-0000-C000-000000000046) ] dispinterface RecordList { properties: methods: } [ uuid(000C109A-0000-0000-C000-000000000046) ] dispinterface UIPreview { properties: methods: } [ uuid(000C109B-0000-0000-C000-000000000046) ] dispinterface SummaryInfo { properties: methods: [id(DISPID_SUMMARYINFO_PROPERTY), propget] VARIANT Property([in] long Pid); [id(DISPID_SUMMARYINFO_PROPERTY), propput] void Property( [in] long Pid, [in] VARIANT rhs); [id(DISPID_SUMMARYINFO_PROPERTYCOUNT), propget] long PropertyCount(); } typedef enum { 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, } _MsiViewModify; /* Added underscore to avoid conflict with function name */ [ uuid(000C109C-0000-0000-C000-000000000046) ] dispinterface View { properties: methods: [id(DISPID_VIEW_EXECUTE)] void Execute([in, optional, defaultvalue(0)] Record *Params); [id(DISPID_VIEW_FETCH)] Record* Fetch(); [id(DISPID_VIEW_MODIFY)] void Modify( [in] _MsiViewModify Mode, Record *Record); [id(DISPID_VIEW_CLOSE)] void Close(); } [ uuid(000C109D-0000-0000-C000-000000000046) ] dispinterface Database { properties: methods: [id(DISPID_DATABASE_OPENVIEW)] View* OpenView([in] BSTR Sql); [id(DISPID_DATABASE_SUMMARYINFORMATION), propget] SummaryInfo *SummaryInformation([in, optional, defaultvalue(0)] long UpdateCount); } typedef enum { msiDoActionStatusNoAction = 0, msiDoActionStatusSuccess = 1, msiDoActionStatusUserExit = 2, msiDoActionStatusFailure = 3, msiDoActionStatusSuspend = 4, msiDoActionStatusFinished = 5, msiDoActionStatusWrongState = 6, msiDoActionStatusBadActionData = 7 } MsiDoActionStatus; typedef enum { 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 } MsiRunMode; typedef enum { msiEvaluateConditionFalse = 0, msiEvaluateConditionTrue = 1, msiEvaluateConditionNone = 2, msiEvaluateConditionError = 3 } _MsiEvaluateCondition; /* Added underscore to avoid conflict with function name */ typedef enum { msiMessageStatusError = -1, msiMessageStatusNone = 0, msiMessageStatusOk = 1, msiMessageStatusCancel = 2, msiMessageStatusAbort = 3, msiMessageStatusRetry = 4, msiMessageStatusIgnore = 5, msiMessageStatusYes = 6, msiMessageStatusNo = 7 } MsiMessageStatus; typedef enum { msiMessageTypeFatalExit = 0, msiMessageTypeError = 0x01000000, msiMessageTypeWarning = 0x02000000, msiMessageTypeUser = 0x03000000, msiMessageTypeInfo = 0x04000000, msiMessageTypeFilesInUse = 0x05000000, msiMessageTypeResolveSource = 0x06000000, msiMessageTypeOutOfDiskSpace = 0x07000000, msiMessageTypeActionStart = 0x08000000, msiMessageTypeActionData = 0x09000000, msiMessageTypeProgress = 0x0a000000, msiMessageTypeCommonData = 0x0b000000, msiMessageTypeOk = 0, msiMessageTypeOkCancel = 1, msiMessageTypeAbortRetryIgnore = 2, msiMessageTypeYesNoCancel = 3, msiMessageTypeYesNo = 4, msiMessageTypeRetryCancel = 5, msiMessageTypeDefault1 = 0, msiMessageTypeDefault2 = 256, msiMessageTypeDefault3 = 512 } MsiMessageType; [ uuid(000C109E-0000-0000-C000-000000000046) ] dispinterface Session { properties: methods: [id(DISPID_SESSION_INSTALLER), propget] Installer *Installer(); [id(DISPID_SESSION_PROPERTY), propget] BSTR Property([in] BSTR Name); [id(DISPID_SESSION_PROPERTY), propput] void Property( [in] BSTR Name, [in] BSTR rhs); [id(DISPID_SESSION_LANGUAGE), propget] long Language(); [id(DISPID_SESSION_MODE), propget] VARIANT_BOOL Mode([in] MsiRunMode Flag); [id(DISPID_SESSION_MODE), propput] void Mode( [in] MsiRunMode Flag, [in] VARIANT_BOOL rhs); [id(DISPID_SESSION_DATABASE), propget] Database* Database(); [id(DISPID_SESSION_DOACTION)] MsiDoActionStatus DoAction([in] BSTR Action); [id(DISPID_SESSION_EVALUATECONDITION)] _MsiEvaluateCondition EvaluateCondition([in] BSTR Expression); [id(DISPID_SESSION_MESSAGE)] MsiMessageStatus Message( [in] MsiMessageType Kind, [in] Record *Record); [id(DISPID_SESSION_FEATURECURRENTSTATE), propget] MsiInstallState FeatureCurrentState([in] BSTR Feature); [id(DISPID_SESSION_FEATUREREQUESTSTATE), propget] MsiInstallState FeatureRequestState([in] BSTR Feature); [id(DISPID_SESSION_FEATUREREQUESTSTATE), propput] void FeatureRequestState( [in] BSTR Feature, [in] MsiInstallState rhs); [id(DISPID_SESSION_SETINSTALLLEVEL)] void SetInstallLevel([in] long Level); } [ uuid(000C109F-0000-0000-C000-000000000046) ] dispinterface FeatureInfo { properties: methods: } [ uuid(000C10A0-0000-0000-C000-000000000046) ] dispinterface Product { properties: methods: } [ uuid(000C10A1-0000-0000-C000-000000000046) ] dispinterface Patch { properties: methods: } }