Триггер выхода приложения планировщика заданий

Я пишу (win7) программное обеспечение киоска, и я хочу запланировать запуск летучей мыши «выключения» всякий раз, когда мое приложение выходит (сбой, «взломанный» или обычный выход) под определенной учетной записью пользователя с помощью планировщика задач.

Как я могу создать триггер приложение закрыто?

Если это невозможно, мой запасной план состоит в том, чтобы запустить какой-то монитор в событии запуска приложения, но я думаю, что если мой гипотетический хакер сможет закрыть основное приложение, что помешает им закрыть процесс монитора?

EDIT: в настоящее время приложение загружается под чрезмерно ограниченным профилем с директивой runas, выдающей себя за пользователя-администратора. Если расписание задач может быть запущено, я также могу запустить этот пакетный файл из административной учетной записи при закрытии приложения.


person Dead.Rabit    schedule 03.02.2012    source источник


Ответы (3)


Возможно, вы могли бы сделать так, чтобы ваше киоск-приложение создавало и владело глобальным мьютексом, а приложение-монитор ждало мьютекса. Приложение монитора может быть службой, поэтому вам не нужно беспокоиться о его запуске из вашего процесса. Когда ваше приложение завершится, монитор получит право собственности на мьютекс, и в качестве бонуса, если ваш процесс неожиданно завершится (т. е. никогда не освободит мьютекс должным образом), тогда приложение монитора будет иметь AbandonedMutexException выброшено на него. Таким образом, вы узнаете, было ли это нормальным отключением или сбоем/убийством. Вы можете запустить приложение монитора под учетной записью с необходимыми привилегиями для выполнения любых необходимых действий по завершению работы.

person S T Chan    schedule 15.02.2012

У меня есть мысль.

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

person horsley    schedule 15.02.2012
comment
хорошее предложение, но если в Pinvoke нет метода задержки выключения (или я что-то пропустил), команду выключения придется отменить и перезапустить. Основное приложение может полностью отвечать за себя, что упрощает реализацию. Хотя я не уверен в перезапуске команды, - person Dead.Rabit; 15.02.2012
comment
[изменить тайм-аут] - размещение функциональности в одном (открытом) процессе меня беспокоит. Кроме того, отсутствие видимости текущей операции выключения из C# может привести к случайному завершению работы приложения. - person Dead.Rabit; 15.02.2012

Короче говоря, вы не можете, как только процесс приложения завершается, вы не можете продолжать выполнять код в том же процессе. Ваше приложение для мониторинга приложений — это то, что вам нужно. Я бы установил его, чтобы каким-то образом предупредить вас, если возникнет какая-то проблема. Если вы установите достаточно короткий интервал опроса, будет непрактично (хотя и возможно) завершать работу обоих приложений перед отправкой какого-либо предупреждения.

person Nathan Rice    schedule 13.02.2012