@@ -23,13 +23,18 @@ BOOL TryInvoke(F&& func, LPCWSTR msg)
2323 return S_OK;
2424}
2525
26- // 尝试执行一个步骤
26+ // 尝试执行一个步骤,如果错误就抛出
2727#define TryStep (func, msg ) \
2828 do { auto r = TryInvoke ([&] { return func; }, msg); if (r) { return FALSE ; } } while (0 );
2929
30+ // 不执行func, 直接抛出错误
3031#define ErrThrow (msg ) \
3132 do { TryInvoke ([&] { return E_FAIL; }, msg); return FALSE ; } while (0 );
3233
34+ // 预期中的错误, 不抛出错误,直接return一个返回值
35+ #define ExpectedErr (func, ret ) \
36+ do { if (FAILED (func)) { return ret; } } while (0 );
37+
3338
3439std::wstring defaultTaskName ()
3540{
@@ -286,11 +291,8 @@ namespace TaskSched
286291 TryStep (hr, L" COM组件:连接ITaskService失败" );
287292
288293 hr = p_service->GetFolder (CComBSTR (TASK_SCHED_FOLDER), p_task_folder.AsOutPtr ());
289- if (FAILED (hr))
290- {
291- // 断言文件夹不存在,不需要删除任务
292- return TRUE ;
293- }
294+ // 尝试删除一个不存在文件夹,失败是预期
295+ ExpectedErr (hr, TRUE );
294296
295297 {
296298 COMPtr<IRegisteredTask> p_exist_reg_task (nullptr );
@@ -326,17 +328,14 @@ namespace TaskSched
326328 p_service.AsOutVoidPtr ())
327329 , L" COM组件TaskScheduler:创建失败" );
328330
329- // Connect to the task service.
330331 hr = p_service->Connect (_variant_t (), _variant_t (), _variant_t (), _variant_t ());
331332 TryStep (hr, L" COM组件:连接ITaskService失败" );
332333
333- // ------------------------------------------------------
334- // Get the TrafficMonitor task folder.
335334 hr = p_service->GetFolder (CComBSTR (TASK_SCHED_FOLDER), p_task_folder.AsOutPtr ());
336- TryStep (hr, L" COM组件:获取ITaskFolder失败" );
335+ // TryStep(hr, L"COM组件:获取ITaskFolder失败");
336+ // 默认情况任务未创建:GetFolder 失败是预期行为
337+ ExpectedErr (hr, TRUE );
337338
338- // ------------------------------------------------------
339- // If the task exists, disable.
340339 {
341340 COMPtr<IRegisteredTask> p_exist_reg_task (nullptr );
342341 hr = p_task_folder->GetTask (CComBSTR (wstrTaskName.c_str ()), p_exist_reg_task.AsOutPtr ());
0 commit comments