Я написал небольшой код на C и хочу попробовать запустить его через Schtasks. Запустилось, но не работала функция winapi, требующая прав администратора.
Для cmd я использую вот эту подсказку (запустил с правами администратора):
schtasks /create /ru SYSTEM /tn TestTask /tr "C:\Users\Koalko\Desktop\main.exe" /sc ONSTART
Я также попробовал добавить свой профиль в группу «Администраторы», но это ничего не изменило:
net localgroup Administrators Koalko /add
Мой код C:
#include <stdio.h>
#include <Windows.h>
int main(int argc, char* argv[]) {
for (int i = 0; i <= 5; i++) {
printf("\rBLOCK INPUT AFTER %d SECONDS", 5-i);
Sleep(1000);
}
printf("\nBLOCK INPUT ON 5 SECONDS!!!\n");
BlockInput(TRUE);
Sleep(5000);
BlockInput(FALSE);
printf("RELEASE INPUT\n");
getchar();
return 0;
}
Я не думаю, что проблема в коде.
@IInspectable BlockInput не работает без прав администратора
Это удивительно. Простите меня за то, что я не слишком задумывался о требованиях к API, у которого нет допустимого варианта использования.
Тем не менее, я почти уверен, что запланированные задачи выполняются в контексте службы. Службы выполняются в сеансе 0. Вы не можете заблокировать ввод интерактивного сеанса из неинтерактивного сеанса.
Также нет смысла печатать выходные данные в неинтерактивном сеансе.
Хорошо, есть ли способ запустить программу в интерактивном режиме с правами администратора?





Большое спасибо IInspectable и Реми Лебо.
Проблема заключалась в том, что программа работала в неинтерактивном сеансе, поэтому BlockInput не могла быть выполнена.
Просмотрев документацию schtasks, я нашел атрибут /IT, который позволяет запускать задачи в интерактивном сеансе.
Важно отметить, что этот атрибут не работает с пользователем SYSTEM и не выполняется с /sc ONSTART.
schtasks /create /ru Koalko /tn TestTask /tr "C:\Users\Koalko\Desktop\main.exe" /sc ONLOGON /RL HIGHEST /IT /f
Здесь нет вызова API, требующего прав администратора.