From: Vijay Kiran Kamuju <infyquest(a)gmail.com> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47152 --- programs/schtasks/schtasks.c | 47 +++++++++++++++++++++++++++--- programs/schtasks/tests/schtasks.c | 22 +++++++++++++- 2 files changed, 64 insertions(+), 5 deletions(-) diff --git a/programs/schtasks/schtasks.c b/programs/schtasks/schtasks.c index 785552335d7..31edcb74463 100644 --- a/programs/schtasks/schtasks.c +++ b/programs/schtasks/schtasks.c @@ -194,7 +194,7 @@ static int change_command(int argc, WCHAR *argv[]) static int create_command(int argc, WCHAR *argv[]) { - const WCHAR *task_name = NULL, *xml_file = NULL; + const WCHAR *task_name = NULL, *xml_file = NULL, *task_run = NULL, *schedule = NULL; ITaskFolder *root = NULL; LONG flags = TASK_CREATE; IRegisteredTask *task; @@ -240,6 +240,7 @@ static int create_command(int argc, WCHAR *argv[]) } FIXME("Unsupported /tr option %s\n", debugstr_w(argv[1])); + task_run = argv[1]; tr_mode = TRUE; argc -= 2; argv += 2; @@ -249,7 +250,7 @@ static int create_command(int argc, WCHAR *argv[]) return 1; } - FIXME("Unsupported /sc option %s\n", debugstr_w(argv[1])); + schedule = argv[1]; tr_mode = TRUE; argc -= 2; argv += 2; @@ -284,7 +285,7 @@ static int create_command(int argc, WCHAR *argv[]) if (!task_name) { FIXME("Missing /tn argument\n"); - return 1; + return E_FAIL; } if (xml_mode) { @@ -300,7 +301,7 @@ static int create_command(int argc, WCHAR *argv[]) xml = read_file_to_bstr(xml_file); if (!xml) - return 1; + return E_FAIL; root = get_tasks_root_folder(); if (!root) { @@ -321,6 +322,44 @@ static int create_command(int argc, WCHAR *argv[]) IRegisteredTask_Release(task); return 0; } + + if (tr_mode) { + if (!task_run) { + FIXME("Missing /tr argument\n"); + return E_FAIL; + } + + if (!schedule) { + FIXME("Missing /sc argument\n"); + return E_FAIL; + } else if (!wcsicmp(schedule, L"minute")){ + FIXME("Unsupported /sc minute\n"); + } else if (!wcsicmp(schedule, L"hourly")){ + FIXME("Unsupported /sc hourly\n"); + } else if (!wcsicmp(schedule, L"daily")){ + FIXME("Unsupported /sc daily\n"); + } else if (!wcsicmp(schedule, L"weekly")){ + FIXME("Unsupported /sc weekly\n"); + } else if (!wcsicmp(schedule, L"monthly")){ + FIXME("Unsupported /sc monthly\n"); + } else if (!wcsicmp(schedule, L"once")){ + FIXME("Unsupported /sc once\n"); + } else if (!wcsicmp(schedule, L"onstart")){ + FIXME("Unsupported /sc onstart\n"); + } else if (!wcsicmp(schedule, L"onlogon")){ + FIXME("Unsupported /sc onlogon\n"); + } else if (!wcsicmp(schedule, L"onidle")){ + FIXME("Unsupported /sc onidle\n"); + } else if (!wcsicmp(schedule, L"onevent")){ + FIXME("Unsupported /sc onevent\n"); + } else { + FIXME("Invalid schedule type %s\n", debugstr_w(schedule)); + return E_FAIL; + } + + return 0; + } + return E_FAIL; } diff --git a/programs/schtasks/tests/schtasks.c b/programs/schtasks/tests/schtasks.c index dd7d331f368..e7ddf3b29c5 100644 --- a/programs/schtasks/tests/schtasks.c +++ b/programs/schtasks/tests/schtasks.c @@ -245,9 +245,23 @@ START_TEST(schtasks) create_file("test.xml", xml_a); + create_file("empty.xml", ""); + + r = run_command("schtasks /create /xml test.xml"); + ok(r == E_FAIL, "r = %lx\n", r); /* missing arguments */ + + r = run_command("schtasks /create /xml test.xml /tn"); + ok(r == E_FAIL, "r = %lx\n", r); /* missing arguments */ + + r = run_command("schtasks /create /xml /tn wine\\winetest"); + ok(r == E_FAIL, "r = %lx\n", r); /* missing arguments */ + r = run_command("schtasks /create /xml test.xml /tn wine\\winetest"); ok(r == 0, "r = %lu\n", r); + r = run_command("schtasks /create /xml empty.xml /tn wine\\winetest"); + ok(r == 0, "r = %lu\n", r); + r = run_command("schtasks /create /xml test.xml /tn wine\\winetest /tr c:\\windows\\hh.exe"); ok(r == E_FAIL, "r = %lu\n", r); @@ -269,6 +283,9 @@ START_TEST(schtasks) r = run_command("schtasks /create /tn wine\\winetest"); ok(r == E_FAIL, "r = %lx\n", r); /* missing arguments */ + r = run_command("schtasks /create /tn"); + ok(r == E_FAIL, "r = %lx\n", r); /* missing arguments */ + r = run_command("schtasks /create /tn wine\\winetest /tr c:\\windows\\hh.exe"); ok(r == E_FAIL, "r = %lx\n", r); /* missing arguments */ @@ -276,11 +293,14 @@ START_TEST(schtasks) ok(r == E_FAIL, "r = %lx\n", r); /* invalid schedule */ r = run_command("schtasks /create /tn wine\\winetest /tr c:\\windows\\hh.exe /sc daily"); - todo_wine ok(r == 0, "r = %lx\n", r); /* daily schedule */ + ok(r == 0, "r = %lx\n", r); /* daily schedule */ r = run_command("schtasks /DELETE /f /tn wine\\winetest"); todo_wine ok(r == 0, "r = %lu\n", r); + r = DeleteFileA("empty.xml"); + ok(r, "DeleteFileA failed: %lu\n", GetLastError()); + r = DeleteFileA("test.xml"); ok(r, "DeleteFileA failed: %lu\n", GetLastError()); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/5151