2012-02-25 2 views
3

Я создал файл библиотеки C#, который перейдет к локальному пути, например, (c: \ test.txt), найдите файл и загрузите его на ftp-сервер.Как позвонить в мою dll из службы windows?

Для тестирования я просто вызвал dll из консольного приложения, но как я могу работать как сервис Windows, который будет работать непрерывно?

Я полагаю, что эта DLL запускает эту службу в качестве службы для мониторинга папки c: \, если какой-либо файл появляется как «test.txt», а затем загружается.

Заранее спасибо

ответ

5

Библиотека DLL является «под названием» при использовании его функции. Поэтому, если у вас есть проект DLL с несколькими классами и несколькими функциями внутри ваших классов, просто add the DLL as a reference в ваш сервисный проект и вызовите соответствующие функции.

Возможно, вы захотите использовать this library для создания службы Windows. Причина в том, что при создании службы Windows с использованием шаблона Visual Studio результирующая сборка не выполняется «run». Полученная сборка - это служба Windows, которая должна быть установлена, а затем started using the Services Snap-In. Но используя пользовательскую библиотеку Windows Service для Hoytsoft, ваша служба автоматически установит себя, а затем автоматически запустится - как обычное приложение Windows Form.

Чтобы убедиться, что ваша служба запущена при запуске, не забудьте настроить класс службы AutoStart (как описано в его статье CodeProject). Чтобы ваша служба работала непрерывно, даже когда процесс был убит, вы можете добавить этот удобный хак реестра, который устанавливает флаги Restart Service для немедленного перезапуска.

Этот Реестр Hack == enter image description here

Registry Hack:

Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Services\<YOUR_SERVICE_NAME_HERE>", true); 
key.SetValue("FailureActions", new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 20, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, Microsoft.Win32.RegistryValueKind.Binary); 
key.Close(); 

Поймите, что любой пользователь с правами администратора может все еще убить процесс, просто отключить ваш сервис.

+0

Это потрясающий Джейсон, но я не уверен, что HoytSoft.dll работает на моей тестовой среде - 64 бит. – Usher

+0

Хм, у вас есть конкретная ошибка? – Jason

+0

Я еще не тестировал в своей тестовой среде до развертывания там, просто хочу убедиться, что он поддерживает и 64-битную. – Usher

0

Ознакомьтесь с классом FileSystemWatcher, чтобы следить за изменениями в каталоге/файле.

+1

Спасибо за помощь, но вы могли бы неправильно понять, я получил ответ от Джейсона. – Usher

+0

Хорошо, вам показалось, что ваша цель - следить за каталогом, и это то, что делает класс FileSystemWatcher. –

+0

Нет, мне дали пример, я предположил, что должен следить за моей базой данных (ранее использовался триггер), но не работал в моем сценарии, поэтому я перешел на службу Windows, чтобы сделать эту часть. – Usher

Смежные вопросы