как вызвать мою dll из службы windows? - PullRequest
3 голосов
/ 25 февраля 2012

Я создал файл библиотеки ac #, который пойдет по локальному пути, например, для (c: \ test.txt) найти файл и загрузить на FTP-сервер.

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

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

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

Ответы [ 2 ]

5 голосов
/ 25 февраля 2012

DLL "вызывается", когда вы используете ее функции. Поэтому, если у вас есть проект DLL с несколькими классами и несколькими функциями внутри ваших классов, просто добавьте DLL в качестве ссылки в ваш проект Service и вызовите соответствующие функции.

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

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

Этот взлом реестра == enter image description here

Взлом реестра:

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 голосов
/ 25 февраля 2012

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

...