From: Vijay Kiran Kamuju infyquest@gmail.com
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47152 --- programs/schtasks/schtasks.c | 45 ++++++++++++++++++++++++++++-- programs/schtasks/tests/schtasks.c | 22 ++++++++++++++- 2 files changed, 63 insertions(+), 4 deletions(-)
diff --git a/programs/schtasks/schtasks.c b/programs/schtasks/schtasks.c index 785552335d7..ddd2ee723e1 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) { @@ -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..5b35e278940 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 == 1, "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());