С++ Создание задачи, выполняемой при загрузке системы
В данном примере создаётся задача, выполняемая при загрузке ПК, которая запускает указанное приложение. RegisterTaskDefinition
возвращает E_ACCESSDENIED
при запуске от имени обычного пользователя. Если запустить от имени администратора, всё работает без ошибок. Получается нельзя создавать задачи, выполняемые при включении компьютера, без разрешения администратора? Может быть в представленном примере есть ошибки или есть другой способ создания задачи автозапуска без запроса прав?
CComPtr<ITaskService> pTaskService;
CHECK_HR(pTaskService.CoCreateInstance(__uuidof(TaskScheduler)));
CHECK_HR(pTaskService->Connect(CComVariant(),
CComVariant(),
CComVariant(),
CComVariant()));
CComPtr<ITaskFolder> pRootTaskFolder;
CHECK_HR(pTaskService->GetFolder(CComBSTR(L"\\"), &pRootTaskFolder));
CComPtr<ITaskDefinition> pTaskDef;
CHECK_HR(pTaskService->NewTask(0, &pTaskDef));
CComPtr<ITaskSettings> pTaskSettings;
CHECK_HR(pTaskDef->get_Settings(&pTaskSettings));
CHECK_HR(pTaskSettings->put_DisallowStartIfOnBatteries(VARIANT_FALSE));
CHECK_HR(pTaskSettings->put_ExecutionTimeLimit(CComBSTR("PT0S")));
CHECK_HR(pTaskSettings->put_AllowDemandStart(VARIANT_FALSE));
CHECK_HR(pTaskSettings->put_Hidden(VARIANT_TRUE));
CComPtr<ITriggerCollection> pTriggers;
CHECK_HR(pTaskDef->get_Triggers(&pTriggers));
CComPtr<ITrigger> pTrigger;
CHECK_HR(pTriggers->Create(TASK_TRIGGER_BOOT, &pTrigger));
CComPtr<IActionCollection> pActions;
CHECK_HR(pTaskDef->get_Actions(&pActions));
CComPtr<IAction> pAction;
CHECK_HR(pActions->Create(TASK_ACTION_EXEC, &pAction));
CComQIPtr<IExecAction> pExecAction(pAction);
CHECK_HR(pExecAction->put_Path(CComBSTR(lpAppName)));
CHECK_HR(pExecAction->put_WorkingDirectory(CComBSTR(lpWorkingDir)));
CComPtr<IRegisteredTask> pRegisteredTask;
HRESULT hr = pRootTaskFolder->RegisterTaskDefinition(CComBSTR(lpTaskName),
pTaskDef, TASK_CREATE_OR_UPDATE,
CComVariant(),
CComVariant(),
TASK_LOGON_INTERACTIVE_TOKEN,
CComVariant(),
&pRegisteredTask);
CHECK_HR(hr);