Ответ 1
Мне интересно, что другие люди должны сказать, но я дам вам несколько моментов, которые я наткнулся на:
-
Сделать обработчик событий для Unhandled Exceptions. Таким образом, вы можете очищать ресурсы, записывать в файл журнала, отправлять по электронной почте администратора или все, что вам нужно, вместо того, чтобы сбой.
AppDomain.CurrentDomain.UnhandledException + = новый UnhandledExceptionEventHandler (AppUnhandledExceptionEventHandler);
-
Переопределите любые обработчики событий базы данных, которые вам нужны в основной части приложения. OnStart и OnStop довольно важны, но есть много других, которые вы можете использовать. http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase%28v=VS.71%29.aspx
-
Остерегайтесь таймеров. Таймеры Windows Forms не будут работать правильно в службе. User System.Threading.Timers или System.Timers.Timer. Лучший таймер для использования в службе Windows
-
Если вы обновляете поток, убедитесь, что вы используете блокировку() или монитор в разделах ключей, чтобы убедиться, что все поточно-безопасно.
-
Будьте осторожны, чтобы не использовать ничего конкретного для пользователя, поскольку служба работает без определенного пользовательского контекста. Я заметил, что некоторые из моих строк подключения SQL больше не работают для авторизации Windows и т.д. Также слышали, что у людей возникли проблемы с подключенными дисками.
-
Никогда не делайте сервис с пользовательским интерфейсом. Фактически для Vista и 7 они делают практически невозможным все равно. Он не должен требовать взаимодействия с пользователем, большинство из которых вы можете сделать, это отправить сообщение с функцией WIN32. Заявки MSDN, делающие интерактивные услуги, являются плохой практикой. http://msdn.microsoft.com/en-us/library/ms683502%28VS.85%29.aspx
-
Для целей отладки, это здорово сделать запуск службы в качестве консольного приложения, пока вы не сделаете то, что хотите. Ужасный учебник: http://mycomponent.blogspot.com/2009/04/create-debug-install-windows-service-in.html
В любом случае, надеюсь, что это поможет немного, но это всего лишь пара вещей, которые я ткнул, чтобы найти сам.