Вы читали wiki FAQ затмения, Каково различие между командой и действием?
Вы, вероятно, уже понимаете, что Действия и Команды в основном делают то же самое: Они заставляют определенную часть кода выполняться. Они инициированы, главным образом, от artificats в пользовательском интерфейсе
основное беспокойство с [1 121], Действия состоят в том, что проявление и код все хранятся в Действии .
, Хотя существует некоторое разделение в Делегатах Действия, они все еще подключены к основному иску. События выбора передаются Действиям так, чтобы они могли изменить свое включенное состояние (программно) на основе текущего выбора. Это не очень изящно. Также для размещения действия с определенной частью инструментальных средств необходимо использовать несколько точек расширения.Команды в значительной степени решают все эти проблемы. Основная идея состоит в том, что Команда является просто абстрактной идеей некоторого кода, который будет выполняться. Фактическая обработка кода сделана, ну, в общем, обработчиками . Обработчики активируются определенным состоянием инструментальных средств. Это состояние запрашивается выражениями ядра платформы. Это означает, что нам только нужна одна глобальная команда Save, которая ведет себя по-другому, на основе которого обработчик в настоящее время активен.
Этот статья детализирует различия
Действия :
Команды включают больше точек расширения, но:
Есть ли причина, по которой должен быть службой Windows? Если нет, то следуйте решению @Macros. Однако, если это так, то зачем останавливать службу? Если вы остановите его, его просто нужно будет перезапустить, когда нужно будет отправить электронные письма. Судя по вашему описанию, это не похоже на то, что для этого потребуется много ресурсов, поэтому я предлагаю просто установить его и дать ему поработать, запускаясь раз в месяц для отправки писем.
вот что я сделал в аналогичной ситуации.
служба Windows работает круглосуточно и без выходных и обрабатывает рабочие единицы. он получает рабочие единицы через представление базы данных.
сообщение таблицы
ProcessingStartTime
CompletionDTE
...
представление базы данных извлекает только записи, помеченные как неполные и имеющие в прошлом свойство ProcessingStartTime. Поэтому после того, как служба подтверждает транзакцию, она выполняет хранимую процедуру, которая обновляет запись в базе данных. В этой системе конечный пользователь загружает файлы Excel на веб-сайт asp.net, который импортирует их в базу данных.
Если у вас есть задача, которая повторяется ежемесячно, вам, возможно, лучше написать консольное приложение, а затем используя Планировщик заданий Windows , чтобы настроить его ежемесячный запуск. Служба должна использоваться для процессов, которые должны выполняться в течение длительного времени или постоянно, с пользователем или без входа в систему
net stop [service_name] ... в командной строке тоже будет.
Но я согласен со всеми; похоже, что планировщик задач Windows лучше удовлетворит ваши потребности.
Если это служба Win32 (то есть написанная на C или C ++), вы просто вызываете SetServiceStatus (SERVICE_STOPPED) и возвращаетесь из ServiceMain.
С другой стороны, если вы просто отправляйте электронные письма раз в месяц, зачем вы вообще пользуетесь услугами? Используйте Планировщик задач Windows и запустите обычное приложение или сценарий.
document.onkeydown = function(e) {
//do what you need to do
}
Это все, что нужно в javascript. Вам не нужно зацикливаться на ожидании события, всякий раз, когда происходит событие, будет вызываться эта функция, которая, в свою очередь, может вызывать другие функции, делать все, что необходимо. Думайте об этом так, что вместо того, чтобы ждать события, которое вы ищете, событие, которое вы ищете, сообщит вам, когда оно произойдет.
При работе в .NET вам просто нужно вызвать метод Stop ()
, унаследованный от ServiceBase
, когда ваша служба завершит свою работу. Из документации MSDN для метода:
Метод Stop устанавливает состояние службы для обозначения ожидаемой остановки и вызывает метод OnStop. После приложение остановлено, служба состояние установлено как остановлено. Если приложение является размещенной службой, домен приложения выгружен.
Здесь есть одно важное предостережение: учетная запись пользователя, под которой запущена служба, должна иметь разрешение на остановку служб (это тема для ServerFault ).
Однажды служба Метод OnStart
завершен, он будет продолжать работать (ничего не делать), пока что-то не скажет ему остановиться одним из следующих способов:
Stop
внутри самой службы или из
внешний процесс с использованием метода
Колин Гравилл описывает в своей
ответ . Возможно, лучше было бы написать это как запланированное задание, это, безусловно, было бы проще разработать на начальном этапе. Тогда он естественным образом прекратит работу и не будет потреблять ресурсы до конца месяца.
Чтобы ответить на исходный вопрос, вы можете получить список текущих запущенных сервисов на C #
services = System.ServiceProcess.ServiceController.GetServices();
Затем найдите тот, который вам нужен и установите статус остановлен
locatedService.Status == ServiceControllerStatus.Stopped
Полный пример на msdn