James Hawkins : msi: Implement the UILevel property of the Installer object .
Alexandre Julliard
julliard at winehq.org
Sat Mar 1 06:13:24 CST 2008
Module: wine
Branch: master
Commit: 617eb48d5bb2b3182a4bed00676851fea029ee90
URL: http://source.winehq.org/git/wine.git/?a=commit;h=617eb48d5bb2b3182a4bed00676851fea029ee90
Author: James Hawkins <jhawkins at codeweavers.com>
Date: Fri Feb 29 13:37:44 2008 -0600
msi: Implement the UILevel property of the Installer object.
---
dlls/msi/automation.c | 26 ++++++++++++++++++++++++++
dlls/msi/msiserver.idl | 15 +++++++++++++++
dlls/msi/msiserver_dispids.h | 1 +
dlls/msi/tests/automation.c | 6 ++----
4 files changed, 44 insertions(+), 4 deletions(-)
diff --git a/dlls/msi/automation.c b/dlls/msi/automation.c
index dc94cbc..ed6b7f1 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 317a3ac..d5b47ac 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 afbadbb..3a58f6a 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 09d1279..089360b 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 {
More information about the wine-cvs
mailing list