diff --git a/dlls/msi/automation.c b/dlls/msi/automation.c index dc94cbc3459..ed6b7f11ee8 100644 --- a/dlls/msi/automation.c +++ b/dlls/msi/automation.c @@ -1535,6 +1535,7 @@ static HRESULT WINAPI InstallerImpl_Invoke( HRESULT hr; LPWSTR szString = NULL; DWORD dwSize = 0; + INSTALLUILEVEL ui; VariantInit(&varg0); VariantInit(&varg1); @@ -1627,6 +1628,31 @@ static HRESULT WINAPI InstallerImpl_Invoke( else return DISP_E_MEMBERNOTFOUND; break; + case DISPID_INSTALLER_UILEVEL: + if (wFlags & DISPATCH_PROPERTYPUT) + { + hr = DispGetParam(pDispParams, 0, VT_I4, &varg0, puArgErr); + if (FAILED(hr)) return hr; + if ((ui = MsiSetInternalUI(V_I4(&varg0), NULL) == INSTALLUILEVEL_NOCHANGE)) + { + ERR("MsiSetInternalUI failed\n"); + return DISP_E_EXCEPTION; + } + } + else if (wFlags & DISPATCH_PROPERTYGET) + { + if ((ui = MsiSetInternalUI(INSTALLUILEVEL_NOCHANGE, NULL) == INSTALLUILEVEL_NOCHANGE)) + { + ERR("MsiSetInternalUI failed\n"); + return DISP_E_EXCEPTION; + } + + V_VT(pVarResult) = VT_I4; + V_I4(pVarResult) = ui; + } + else return DISP_E_MEMBERNOTFOUND; + break; + case DISPID_INSTALLER_INSTALLPRODUCT: if (wFlags & DISPATCH_METHOD) { diff --git a/dlls/msi/msiserver.idl b/dlls/msi/msiserver.idl index 317a3acac82..d5b47acbf4a 100644 --- a/dlls/msi/msiserver.idl +++ b/dlls/msi/msiserver.idl @@ -126,10 +126,25 @@ library WindowsInstaller 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); diff --git a/dlls/msi/msiserver_dispids.h b/dlls/msi/msiserver_dispids.h index afbadbba5db..3a58f6afb5c 100644 --- a/dlls/msi/msiserver_dispids.h +++ b/dlls/msi/msiserver_dispids.h @@ -19,6 +19,7 @@ #define DISPID_INSTALLER_CREATERECORD 1 #define DISPID_INSTALLER_OPENPACKAGE 2 #define DISPID_INSTALLER_OPENDATABASE 4 +#define DISPID_INSTALLER_UILEVEL 6 #define DISPID_INSTALLER_INSTALLPRODUCT 8 #define DISPID_INSTALLER_VERSION 9 #define DISPID_INSTALLER_REGISTRYVALUE 11 diff --git a/dlls/msi/tests/automation.c b/dlls/msi/tests/automation.c index 09d1279c310..089360be36f 100644 --- a/dlls/msi/tests/automation.c +++ b/dlls/msi/tests/automation.c @@ -470,11 +470,9 @@ static void test_dispid(void) ok( get_dispid( pInstaller, "OpenPackage" ) == 2, "dispid wrong\n"); todo_wine ok( get_dispid( pInstaller, "OpenProduct" ) == 3, "dispid wrong\n"); ok( get_dispid( pInstaller, "OpenDatabase" ) == 4, "dispid wrong\n"); - todo_wine { - ok( get_dispid( pInstaller, "SummaryInformation" ) == 5, "dispid wrong\n"); + todo_wine ok( get_dispid( pInstaller, "SummaryInformation" ) == 5, "dispid wrong\n"); ok( get_dispid( pInstaller, "UILevel" ) == 6, "dispid wrong\n"); - ok( get_dispid( pInstaller, "EnableLog" ) == 7, "dispid wrong\n"); - } + todo_wine ok( get_dispid( pInstaller, "EnableLog" ) == 7, "dispid wrong\n"); ok( get_dispid( pInstaller, "InstallProduct" ) == 8, "dispid wrong\n"); ok( get_dispid( pInstaller, "Version" ) == 9, "dispid wrong\n"); todo_wine {