From: Ivan Lyugaev <valy@etersoft.ru> --- dlls/msi/automation.c | 12 ++++++++++++ dlls/msi/msiserver.idl | 2 ++ dlls/msi/msiserver_dispids.h | 1 + dlls/msi/tests/automation.c | 11 +++++++++++ 4 files changed, 26 insertions(+) diff --git a/dlls/msi/automation.c b/dlls/msi/automation.c index 36891cc62da..c31600c9d04 100644 --- a/dlls/msi/automation.c +++ b/dlls/msi/automation.c @@ -1326,6 +1326,18 @@ HRESULT database_invoke( else return DISP_E_MEMBERNOTFOUND; break; + case DISPID_DATABASE_COMMIT: + if (wFlags & DISPATCH_METHOD) + { + if ((ret = MsiDatabaseCommit(This->msiHandle)) != ERROR_SUCCESS) + { + ERR("MsiDatabaseCommit returned %d\n", ret); + return DISP_E_EXCEPTION; + } + } + else return DISP_E_MEMBERNOTFOUND; + break; + case DISPID_INSTALLER_LASTERRORRECORD: return DatabaseImpl_LastErrorRecord(wFlags, pDispParams, pVarResult, pExcepInfo, diff --git a/dlls/msi/msiserver.idl b/dlls/msi/msiserver.idl index 1fda4fa5583..fd0e65be00e 100644 --- a/dlls/msi/msiserver.idl +++ b/dlls/msi/msiserver.idl @@ -345,6 +345,8 @@ library WindowsInstaller View* OpenView([in] BSTR Sql); [id(DISPID_DATABASE_SUMMARYINFORMATION), propget] SummaryInfo *SummaryInformation([in, defaultvalue(0)] long UpdateCount); + [id(DISPID_DATABASE_COMMIT)] + void Commit(); } typedef enum { diff --git a/dlls/msi/msiserver_dispids.h b/dlls/msi/msiserver_dispids.h index d98d784940a..1e7302abbc3 100644 --- a/dlls/msi/msiserver_dispids.h +++ b/dlls/msi/msiserver_dispids.h @@ -51,6 +51,7 @@ #define DISPID_DATABASE_SUMMARYINFORMATION 2 #define DISPID_DATABASE_OPENVIEW 3 +#define DISPID_DATABASE_COMMIT 4 #define DISPID_SESSION_INSTALLER 1 #define DISPID_SESSION_PROPERTY 2 diff --git a/dlls/msi/tests/automation.c b/dlls/msi/tests/automation.c index 3309c648c8a..cfa16c7cc58 100644 --- a/dlls/msi/tests/automation.c +++ b/dlls/msi/tests/automation.c @@ -1251,6 +1251,13 @@ static HRESULT Database_OpenView(IDispatch *pDatabase, LPCWSTR szSql, IDispatch return hr; } +static HRESULT Database_Commit(IDispatch *pDatabase) +{ + VARIANT varresult; + DISPPARAMS dispparams = {0}; + return invoke(pDatabase, "Commit", DISPATCH_METHOD, &dispparams, &varresult, VT_EMPTY); +} + static HRESULT Database_SummaryInformation(IDispatch *pDatabase, int iUpdateCount, IDispatch **pSummaryInfo) { VARIANT varresult; @@ -1718,6 +1725,10 @@ static void test_Database(IDispatch *pDatabase, BOOL readonly) test_SummaryInfo(pSummaryInfo, summary_info, ARRAY_SIZE(summary_info), readonly); IDispatch_Release(pSummaryInfo); } + + /* Database::Commit */ + hr = Database_Commit(pDatabase); + ok(hr == S_OK, "Database_Commit failed, hresult %#lx\n", hr); } static void test_Session(IDispatch *pSession) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10981