Как настроить запуск только при входе в систему и запуске, как с TaskScheduler в С#?

У меня есть код, который использует объект C# TaskManager для создания задачи. В Windows 7 это работает нормально, но в Windows XP (и, предположительно, в других Windows) это не работает вообще, потому что пользователем по умолчанию для задачи является система, и, следовательно, нет сеанса для отображения графического интерфейса. Если я изменю созданную задачу вручную в виджете панели управления, чтобы задание запускалось только тогда, когда пользователь вошел в систему и только для конкретного пользователя, тогда все работает отлично. Но, несмотря на часы поиска, я не вижу вариантов установки этих параметров в объектах С#. Кто-нибудь знает решение с существующими объектами? Я бы не хотел переписывать все, чтобы вручную запускать EXE-файл планировщика и передавать данные из командной строки.

Q


person Quinxy von Besiex    schedule 17.11.2011    source источник
comment
Интерфейс планировщика задач основан на COM, например, вам понадобится IScheduledWorkItem::SetFlags(). Нет объекта C# TaskManager. Может быть, вам следует опубликовать ссылку на код, который вы где-то нашли?   -  person Hans Passant    schedule 17.11.2011
comment
Спасибо! В конце концов я обнаружил это самостоятельно, но вы, конечно, были правы насчет того, что я использовал стороннюю оболочку, я этого не осознавал! Я разместил решение.   -  person Quinxy von Besiex    schedule 17.11.2011
comment
@QuinxyvonBesiex Вы должны добавить свой ответ ниже, а затем, по прошествии необходимого времени, выбрать его в качестве ответа - сохраните чистоту   -  person Prescott    schedule 17.01.2012


Ответы (1)


Хорошо, я понял ответ!

Я этого не осознавал, но использовал стороннюю управляемую оболочку планировщика заданий (это было некоторое время с тех пор, как я написал эту часть своего кода), и это объясняет, почему помощь было трудно найти! Я наткнулся на эту страницу минуту назад, и прямо там, в их примерах, было как раз то, что мне было нужно! подробное решение в контексте можно найти здесь, но ключевая часть:

// Create a new task definition and assign properties
TaskDefinition td = ts.NewTask();
td.Principal.UserId = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
td.Principal.LogonType = TaskLogonType.InteractiveToken;

Спасибо за попытку помочь!

person Quinxy von Besiex    schedule 19.01.2012
comment
В некоторых случаях это больше, чем просто установка типа входа в систему. Если только этот ответ не заставит ваш код работать, см. этот вопрос: stackoverflow.com/questions/43599271/ - person Roger Hill; 03.05.2017