Могу ли я разработать службу Windows, которая может быть как служба Windows и () приложение? - PullRequest
1 голос
/ 24 декабря 2010

Предположим, я хочу создать службу Windows, но, поскольку я хочу ее отладить, (и могут быть другие причины ...) Я хочу создать приложение, которое может быть построено как приложение службы Windows или. Как мне это сделать?


Можете ли вы сделать это, построив функциональность вашего сервиса в приложении-помощнике службы, скажем serviceHelper, и внедрив методы start и stop и все, что вам нужно? Можете ли вы затем создать очень маленький Windows-сервис, который запускается и останавливается и т. Д., Которые вам нужны, реализуются простым вызовом методов в только что созданном serviceHelper? И таким образом отлаживаете свой сервис с помощью serviceHelper?

Правда ли, что это работает, за исключением того факта, что вы должны учитывать, что вы не можете отладить проблемы с помощью ProjectInstaller? (serviceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Automatic) (serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalService)

Ответы [ 3 ]

6 голосов
/ 24 декабря 2010

Если вы используете стандартный шаблон обслуживания, но затем отредактируйте Main(), либо:

  • чек if(Environment.UserInteractive) или
  • проверьте аргументы командной строки, например, переключатель "-console"

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

Полный пример (включая самостоятельную установку / удаление) см. В моем ответе здесь .

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

1 голос
/ 24 декабря 2010

Мы используем технику командной строки, описанную Марком Гравеллом, в наших сервисных приложениях, поэтому обязательно попробуйте ее.

Обратите внимание, что вы сможете легко отлаживать приложение, работающее как настоящая служба в WindowsXP и 2003, где вы можете в интерактивном режиме войти в сеанс 0 и подключить ваш отладчик к работающему приложению-службе. «Сеанс 0 изоляции» , представленный в Windows Vista, затрудняет взаимодействие с / отладочными приложениями-службами, поэтому мы заканчиваем наш первый раунд тестирования и отладки в XP..

0 голосов
/ 04 декабря 2012

Вы как раз на правильном пути, когда говорите о создании «вспомогательного приложения». Вы можете встроить всю реальную логику вашего приложения в проект библиотеки классов (dll), а затем написать службу Windows, которая просто вызывает библиотеку.

Затем вы можете писать другие приложения, например консольное приложение или модульные тесты, которые ссылаются на вашу библиотеку классов.

Таким образом, вы можете написать любое внешнее приложение, которое вам нужно, и оно просто взаимодействует с библиотекой классов. Это также, как вы проводите модульные тесты, которые позволят вам протестировать большую часть функциональности даже без реального запуска приложения ... но это действительно большая тема. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...