Ошибка при попытке зарегистрировать задачу с помощью планировщика задач (Win7) - PullRequest
3 голосов
/ 14 октября 2011

Чтобы разрешить запуск моего приложения с правами администратора при входе пользователя в систему, я использую задачу в планировщике задач.И это прекрасно работает.В основном.Теперь я получаю сообщения об ошибках, в которых говорится, что это не удается:

rootFolder->RegisterTaskDefinition( _bstr_t(name.toWideCharPointer()), task,              
   TASK_CREATE_OR_UPDATE, _variant_t(L"Builtin\\Administrators"), _variant_t(), 
   TASK_LOGON_GROUP, _variant_t(L""), &registeredTask) -> 0x80070534

0x80070534, по-видимому, означает «Сопоставление имен учетных записей и идентификаторов безопасности не выполнено».Я следую (в значительной степени дословно) примеру: http://msdn.microsoft.com/en-us/library/aa381911(v=VS.85).aspx

Идеи, что пошло не так, и как это исправить?Приложение имеет установленный манифест, поэтому для его запуска пользователь должен быть администратором.

Вопрос: Группа "Builtin \\ Administrators" зависит от языка, не так ли?Я думаю, что у рассматриваемого пользователя может быть неанглийская Windows 7. Если это так, я полагаю, что было бы лучше работать с указанием "S-1-5-32-544" вместо этого (http://support.microsoft.com/kb/243330)

Обновление: явный вызов выглядит следующим образом:

rootFolder->RegisterTaskDefinition(
            _bstr_t(name.toWideCharPointer()),
            task,
            TASK_CREATE_OR_UPDATE,
            _variant_t(L"S-1-5-32-544"),    // Language independent "BUILTIN\Administrators" 
            _variant_t(),
            TASK_LOGON_GROUP,
            _variant_t(L""),
            &registeredTask)

Убедитесь, что приложение выполняется с повышенными привилегиями, в противном случае этот вызов завершится ошибкой.

Ответы [ 2 ]

3 голосов
/ 17 октября 2011

Проблема действительно заключается в параметре _variant_t(L"Builtin\\Administrators"), который жестко запрограммирован в английской версии Windows. С помощью идентификатора безопасности, независимого от языка "S-1-5-32-544" (http://support.microsoft.com/kb/243330), проблема решена.

Обновление: явный вызов выглядит следующим образом:

rootFolder->RegisterTaskDefinition(
            _bstr_t(name.toWideCharPointer()),
            task,
            TASK_CREATE_OR_UPDATE,
            _variant_t(L"S-1-5-32-544"),    // Language independent "BUILTIN\Administrators" 
            _variant_t(),
            TASK_LOGON_GROUP,
            _variant_t(L""),
            &registeredTask)

Убедитесь, что приложение выполняется с повышенными привилегиями, в противном случае вызов не удастся.

1 голос
/ 21 июля 2017

Потратив некоторое время, я увидел, что требуется больше модификаций, чем просто _variant_t(L"S-1-5-32-544"), чтобы "Пример входа в систему (C ++)" работал.подробности можно найти в этом ответе .

...