559 lines
18 KiB
Plaintext
559 lines
18 KiB
Plaintext
/*
|
|
* 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, size_is(*size)] BSTR value, [in, 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, size_is(*size)] BSTR value, [in, out] DWORD *size );
|
|
HRESULT SetTargetPath( [in] BSTR folder, [in] BSTR value );
|
|
HRESULT GetSourcePath( [in] BSTR folder, [out, size_is(*size)] BSTR value, [in, 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 );
|
|
HRESULT EnumComponentCosts( [in] BSTR component, [in] DWORD index, [in] INSTALLSTATE state,
|
|
[out, size_is(*buflen)] BSTR drive, [in, out] DWORD *buflen, [out] INT *cost, [out] INT *temp );
|
|
}
|
|
|
|
[
|
|
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(000c101c-0000-0000-c000-000000000046),
|
|
oleautomation,
|
|
object
|
|
]
|
|
interface IMsiServer : IUnknown
|
|
{
|
|
/* FIXME: methods */
|
|
}
|
|
|
|
[
|
|
uuid(000c101d-0000-0000-c000-000000000046),
|
|
oleautomation,
|
|
object
|
|
]
|
|
interface IMsiMessage : IUnknown
|
|
{
|
|
/* FIXME: methods */
|
|
}
|
|
|
|
[
|
|
uuid(000c1025-0000-0000-c000-000000000046),
|
|
oleautomation,
|
|
object
|
|
]
|
|
interface IMsiCustomAction : IUnknown
|
|
{
|
|
/* FIXME: methods */
|
|
}
|
|
|
|
[
|
|
uuid(000c1033-0000-0000-c000-000000000046),
|
|
oleautomation,
|
|
object
|
|
]
|
|
interface IMsiRemoteAPI : IUnknown
|
|
{
|
|
/* FIXME: methods */
|
|
}
|
|
|
|
[
|
|
helpstring("Msi install server"),
|
|
progid("IMsiServer"),
|
|
uuid(000c101c-0000-0000-c000-000000000046)
|
|
]
|
|
coclass MsiServer { interface IMsiServer; }
|
|
|
|
[
|
|
helpstring("Microsoft Windows Installer Message RPC"),
|
|
progid("WindowsInstaller.Message"),
|
|
uuid(000c101d-0000-0000-c000-000000000046)
|
|
]
|
|
coclass MsiServerMessage { interface IMsiMessage; }
|
|
|
|
[
|
|
threading(both),
|
|
uuid(000c103e-0000-0000-c000-000000000046)
|
|
]
|
|
coclass PSFactoryBuffer { interface IPSFactoryBuffer; }
|
|
|
|
[
|
|
uuid(000c1082-0000-0000-c000-000000000046)
|
|
]
|
|
coclass MsiTransform { }
|
|
|
|
[
|
|
uuid(000c1084-0000-0000-c000-000000000046)
|
|
]
|
|
coclass MsiDatabase { }
|
|
|
|
[
|
|
uuid(000c1086-0000-0000-c000-000000000046)
|
|
]
|
|
coclass MsiPatch { }
|
|
|
|
[
|
|
threading(apartment),
|
|
uuid(000c1094-0000-0000-c000-000000000046)
|
|
]
|
|
/* FIXME: unidentified class */
|
|
coclass MsiServerX3 { interface IMsiServer; }
|
|
|
|
[
|
|
uuid(ba26e6fa-4f27-4f56-953a-3f90272018aa)
|
|
]
|
|
coclass WineMsiRemoteCustomAction { interface WineMsiRemoteCustomAction; }
|
|
|
|
[
|
|
uuid(902b3592-9d08-4dfd-a593-d07c52546421)
|
|
]
|
|
coclass WineMsiRemotePackage { interface WineMsiRemotePackage; }
|
|
|
|
|
|
[ 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:
|
|
}
|
|
|
|
[
|
|
helpstring("Microsoft Windows Installer"),
|
|
threading(apartment),
|
|
progid("WindowsInstaller.Installer"),
|
|
uuid(000c1090-0000-0000-c000-000000000046)
|
|
]
|
|
coclass MsiInstaller { interface Installer; }
|
|
}
|