Skip to content

Commit df90c9b

Browse files
winesynclearn-more
authored andcommitted
[WINESYNC] msi/tests: Test deferral of StartServices and StopServices.
Signed-off-by: Zebediah Figura <[email protected]> Signed-off-by: Hans Leidekker <[email protected]> Signed-off-by: Alexandre Julliard <[email protected]> wine commit id 7f0c8b3c6130bf1181e83bcdd9ab6b71583208f5 by Zebediah Figura <[email protected]>
1 parent 07f42a0 commit df90c9b

File tree

3 files changed

+49
-0
lines changed

3 files changed

+49
-0
lines changed

modules/rostests/winetests/msi/action.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,16 +259,27 @@ static const char sss_install_exec_seq_dat[] =
259259
"InstallValidate\t\t1400\n"
260260
"InstallInitialize\t\t1500\n"
261261
"StopServices\t\t4000\n"
262+
"stop_immediate\tNOT REMOVE\t4001\n"
263+
"stop_deferred\tNOT REMOVE\t4002\n"
262264
"DeleteServices\t\t5000\n"
263265
"MoveFiles\t\t5100\n"
264266
"InstallFiles\t\t5200\n"
265267
"DuplicateFiles\t\t5300\n"
266268
"StartServices\t\t5400\n"
269+
"start_deferred\tNOT REMOVE\t5401\n"
267270
"RegisterProduct\t\t5500\n"
268271
"PublishFeatures\t\t5600\n"
269272
"PublishProduct\t\t5700\n"
270273
"InstallFinalize\t\t6000\n";
271274

275+
static const char sss_custom_action_dat[] =
276+
"Action\tType\tSource\tTarget\n"
277+
"s72\ti2\tS64\tS0\n"
278+
"CustomAction\tAction\n"
279+
"stop_immediate\t1\tcustom.dll\tsss_started\n"
280+
"stop_deferred\t1025\tcustom.dll\tsss_stopped\n"
281+
"start_deferred\t1025\tcustom.dll\tsss_started\n";
282+
272283
static const char sds_install_exec_seq_dat[] =
273284
"Action\tCondition\tSequence\n"
274285
"s72\tS255\tI2\n"
@@ -1848,6 +1859,7 @@ static const msi_table sss_tables[] =
18481859
ADD_TABLE(file),
18491860
ADD_TABLE(sss_install_exec_seq),
18501861
ADD_TABLE(sss_service_control),
1862+
ADD_TABLE(sss_custom_action),
18511863
ADD_TABLE(media),
18521864
ADD_TABLE(property)
18531865
};

modules/rostests/winetests/msi/custom.c

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1239,3 +1239,38 @@ todo_wine
12391239
CloseServiceHandle(manager);
12401240
return ERROR_SUCCESS;
12411241
}
1242+
1243+
UINT WINAPI sss_started(MSIHANDLE hinst)
1244+
{
1245+
SC_HANDLE manager, service;
1246+
SERVICE_STATUS status;
1247+
BOOL ret;
1248+
1249+
manager = OpenSCManagerA(NULL, NULL, SC_MANAGER_ALL_ACCESS);
1250+
service = OpenServiceA(manager, "Spooler", SC_MANAGER_ALL_ACCESS);
1251+
ret = QueryServiceStatus(service, &status);
1252+
ok(hinst, ret, "QueryServiceStatus failed: %u\n", GetLastError());
1253+
todo_wine_if(!MsiGetMode(hinst, MSIRUNMODE_SCHEDULED))
1254+
ok(hinst, status.dwCurrentState == SERVICE_RUNNING, "got %u\n", status.dwCurrentState);
1255+
1256+
CloseServiceHandle(service);
1257+
CloseServiceHandle(manager);
1258+
return ERROR_SUCCESS;
1259+
}
1260+
1261+
UINT WINAPI sss_stopped(MSIHANDLE hinst)
1262+
{
1263+
SC_HANDLE manager, service;
1264+
SERVICE_STATUS status;
1265+
BOOL ret;
1266+
1267+
manager = OpenSCManagerA(NULL, NULL, SC_MANAGER_ALL_ACCESS);
1268+
service = OpenServiceA(manager, "Spooler", SC_MANAGER_ALL_ACCESS);
1269+
ret = QueryServiceStatus(service, &status);
1270+
ok(hinst, ret, "QueryServiceStatus failed: %u\n", GetLastError());
1271+
ok(hinst, status.dwCurrentState == SERVICE_STOPPED, "got %u\n", status.dwCurrentState);
1272+
1273+
CloseServiceHandle(service);
1274+
CloseServiceHandle(manager);
1275+
return ERROR_SUCCESS;
1276+
}

modules/rostests/winetests/msi/custom.spec

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,5 @@
1111
@ stdcall sds_absent(long)
1212
@ stdcall sis_present(long)
1313
@ stdcall sis_absent(long)
14+
@ stdcall sss_started(long)
15+
@ stdcall sss_stopped(long)

0 commit comments

Comments
 (0)