msi: Implement the UILevel property of the Installer object.

This commit is contained in:
James Hawkins 2008-02-29 13:37:44 -06:00 committed by Alexandre Julliard
parent 724c8da734
commit 617eb48d5b
4 changed files with 44 additions and 4 deletions

View File

@ -1535,6 +1535,7 @@ static HRESULT WINAPI InstallerImpl_Invoke(
HRESULT hr; HRESULT hr;
LPWSTR szString = NULL; LPWSTR szString = NULL;
DWORD dwSize = 0; DWORD dwSize = 0;
INSTALLUILEVEL ui;
VariantInit(&varg0); VariantInit(&varg0);
VariantInit(&varg1); VariantInit(&varg1);
@ -1627,6 +1628,31 @@ static HRESULT WINAPI InstallerImpl_Invoke(
else return DISP_E_MEMBERNOTFOUND; else return DISP_E_MEMBERNOTFOUND;
break; 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: case DISPID_INSTALLER_INSTALLPRODUCT:
if (wFlags & DISPATCH_METHOD) if (wFlags & DISPATCH_METHOD)
{ {

View File

@ -126,10 +126,25 @@ library WindowsInstaller
msiOpenDatabaseModePatchFile = 32 msiOpenDatabaseModePatchFile = 32
} MsiOpenDatabaseMode; } 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) ] [ uuid(000C1090-0000-0000-C000-000000000046) ]
dispinterface Installer dispinterface Installer
{ {
properties: properties:
[id(DISPID_INSTALLER_UILEVEL)]
MsiUILevel UILevel;
methods: methods:
[id(DISPID_INSTALLER_CREATERECORD)] [id(DISPID_INSTALLER_CREATERECORD)]
Record *CreateRecord([in] long Count); Record *CreateRecord([in] long Count);

View File

@ -19,6 +19,7 @@
#define DISPID_INSTALLER_CREATERECORD 1 #define DISPID_INSTALLER_CREATERECORD 1
#define DISPID_INSTALLER_OPENPACKAGE 2 #define DISPID_INSTALLER_OPENPACKAGE 2
#define DISPID_INSTALLER_OPENDATABASE 4 #define DISPID_INSTALLER_OPENDATABASE 4
#define DISPID_INSTALLER_UILEVEL 6
#define DISPID_INSTALLER_INSTALLPRODUCT 8 #define DISPID_INSTALLER_INSTALLPRODUCT 8
#define DISPID_INSTALLER_VERSION 9 #define DISPID_INSTALLER_VERSION 9
#define DISPID_INSTALLER_REGISTRYVALUE 11 #define DISPID_INSTALLER_REGISTRYVALUE 11

View File

@ -470,11 +470,9 @@ static void test_dispid(void)
ok( get_dispid( pInstaller, "OpenPackage" ) == 2, "dispid wrong\n"); ok( get_dispid( pInstaller, "OpenPackage" ) == 2, "dispid wrong\n");
todo_wine ok( get_dispid( pInstaller, "OpenProduct" ) == 3, "dispid wrong\n"); todo_wine ok( get_dispid( pInstaller, "OpenProduct" ) == 3, "dispid wrong\n");
ok( get_dispid( pInstaller, "OpenDatabase" ) == 4, "dispid wrong\n"); ok( get_dispid( pInstaller, "OpenDatabase" ) == 4, "dispid wrong\n");
todo_wine { todo_wine ok( get_dispid( pInstaller, "SummaryInformation" ) == 5, "dispid wrong\n");
ok( get_dispid( pInstaller, "SummaryInformation" ) == 5, "dispid wrong\n");
ok( get_dispid( pInstaller, "UILevel" ) == 6, "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, "InstallProduct" ) == 8, "dispid wrong\n");
ok( get_dispid( pInstaller, "Version" ) == 9, "dispid wrong\n"); ok( get_dispid( pInstaller, "Version" ) == 9, "dispid wrong\n");
todo_wine { todo_wine {