как переделать WinForms под сервис ?
От: Аноним  
Дата: 26.10.10 15:19
Оценка:
Есть форма, достаточно простая. Все что на ней есть — таймер и метод который он вызывает.
Нужно все это сделать в виде Windows Service ( в частности под платформу 2003 ). Используется .NET 3.5 .
Re: как переделать WinForms под сервис ?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 26.10.10 15:20
Оценка: 1 (1) +1
Здравствуйте, Аноним, Вы писали:

Для начала, перепишите всё в виде консольного приложения, которому не требуется ввод пользователя.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[2]: как переделать WinForms под сервис ?
От: Lexey Россия  
Дата: 26.10.10 16:27
Оценка: +2
Здравствуйте, adontz, Вы писали:

A>Для начала, перепишите всё в виде консольного приложения, которому не требуется ввод пользователя.


ИМХО, слово "консольного" тут лишнее.
"Будь достоин победы" (c) 8th Wizard's rule.
Re: как переделать WinForms под сервис ?
От: maloi_alex СССР  
Дата: 26.10.10 18:19
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Нужно все это сделать в виде Windows Service ( в частности под платформу 2003 ). Используется .NET 3.5 .


Important. Services cannot directly interact with a user as of Windows Vista.


Источник: Interactive Services
Re[2]: как переделать WinForms под сервис ?
От: Аноним  
Дата: 26.10.10 20:51
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, Аноним, Вы писали:


A>Для начала, перепишите всё в виде консольного приложения, которому не требуется ввод пользователя.



Ну оно сейчас не требует ввод пользователя. Я ж написал — форма+таймер+обработчик таймера.
Никаких полей ввода и прочего на ней нет
Re[3]: как переделать WinForms под сервис ?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 26.10.10 20:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Ну оно сейчас не требует ввод пользователя. Я ж написал — форма+таймер+обработчик таймера.

А>Никаких полей ввода и прочего на ней нет

Я так же сказал консольное. Без зависимости от System.Windows.Forms
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[3]: как переделать WinForms под сервис ?
От: Jolly Roger  
Дата: 27.10.10 01:28
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Ну оно сейчас не требует ввод пользователя. Я ж написал — форма+таймер+обработчик таймера.

А>Никаких полей ввода и прочего на ней нет

Лучше бы Вы написали, что именно вызывает затруднения, а так Ваш пост как-то не похож на вопрос, и что Вы ожидаете от обсуждения, остаётся совершенно не понятно
"Нормальные герои всегда идут в обход!"
Re[4]: как переделать WinForms под сервис ?
От: Аноним  
Дата: 27.10.10 03:36
Оценка:
Здравствуйте, Jolly Roger, Вы писали:

JR>Здравствуйте, Аноним, Вы писали:


А>>Ну оно сейчас не требует ввод пользователя. Я ж написал — форма+таймер+обработчик таймера.

А>>Никаких полей ввода и прочего на ней нет

JR>Лучше бы Вы написали, что именно вызывает затруднения, а так Ваш пост как-то не похож на вопрос, и что Вы ожидаете от обсуждения, остаётся совершенно не понятно


Не понятно например как таймер реализовать, а также как выглядит "Hellow World" для Windows Service.
Я нашел в проектах студии WCF сервис, но помоему это не тоже самое.
Re[3]: как переделать WinForms под сервис ?
От: Sshur Россия http://shurygin-sergey.livejournal.com
Дата: 27.10.10 06:19
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Ну оно сейчас не требует ввод пользователя. Я ж написал — форма+таймер+обработчик таймера.

А>Никаких полей ввода и прочего на ней нет


И в чем проблема? Делаете новый проект типа Windows Service, в start запускаете свой таймер и копируете туда обработчик. Никакой формы не надо

Для простоты установки сервиса поищите класс WindowsServiceHelper, например здесь
Шурыгин Сергей

"Не следует преумножать сущности сверх необходимости" (с) Оккам
Re[5]: как переделать WinForms под сервис ?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 27.10.10 06:19
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Не понятно например как таймер реализовать


http://msdn.microsoft.com/en-us/magazine/cc164015.aspx

А>а также как выглядит "Hellow World" для Windows Service.

using (MyService service = newMyService())
{
    service.Run();
}

где MyService наследуется от ServiceBase.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[5]: как переделать WinForms под сервис ?
От: Jolly Roger  
Дата: 27.10.10 07:21
Оценка: 12 (1)
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Jolly Roger, Вы писали:


К уже сказанному добавлю, что оконный таймер, который Вы, похоже, использовали в WinForms, в сервисе скорее всего работать не будет, или будет срабатывать в потоке, мало для того подходящем( конкретно с сервисами NET я в этом плане не разбирался, просто есть подозрение). Можно заменить его System.Threading.Timer, либо организовать задержку отдельным потоком, в котором ожидать EventWaitHandle с таймаутом.
"Нормальные герои всегда идут в обход!"
Re[4]: как переделать WinForms под сервис ?
От: Lexey Россия  
Дата: 27.10.10 09:59
Оценка:
Здравствуйте, adontz, Вы писали:

A>Я так же сказал консольное. Без зависимости от System.Windows.Forms


Откуда такие предубеждения? Не обязан сервис быть консольным приложением.
"Будь достоин победы" (c) 8th Wizard's rule.
Re: как переделать WinForms под сервис ?
От: Аноним  
Дата: 27.10.10 12:04
Оценка:
Создай библиотеку, в ней класс с двумя методами: Start/Stop
По старту запускай свой таймер, по стопу останавливай. Эту библиотеку потом можно использовать в WinForms, Консоли, WinService и т.д. без ограничения

Затем поищи в Google "How Do" как создать сервис (в студии есть шаблон проекта), можно создать также инсталятор (Тоже все в студии есть)
Re[5]: как переделать WinForms под сервис ?
От: Jolly Roger  
Дата: 27.10.10 12:46
Оценка:
Здравствуйте, Lexey, Вы писали:

L>Здравствуйте, adontz, Вы писали:


A>>Я так же сказал консольное. Без зависимости от System.Windows.Forms


L>Откуда такие предубеждения? Не обязан сервис быть консольным приложением.


Подозреваю, что это не предубеждения, а опыт То, что работает в сонсольке, то в 99% без переделки работает и в сервисе, чего не сказешь о GUI, в котором сильна завязка на message loop.
"Нормальные герои всегда идут в обход!"
Re[5]: как переделать WinForms под сервис ?
От: v.a.v СССР  
Дата: 27.10.10 14:07
Оценка: +1
Здравствуйте, Lexey, Вы писали:

L>Откуда такие предубеждения? Не обязан сервис быть консольным приложением.

Я даже не уверен что сервис может быть консольным(с точки зрения C# компилятора) приложением. Но разрабатывать/отлаживать функционал будущего сервиса, удобно именно в виде консольного приложения.
Re[5]: как переделать WinForms под сервис ?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 27.10.10 14:33
Оценка:
Здравствуйте, Lexey, Вы писали:

A>>Я так же сказал консольное. Без зависимости от System.Windows.Forms

L>Откуда такие предубеждения? Не обязан сервис быть консольным приложением.

Не обязан, но так удобнее разрабатывать.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: как переделать WinForms под сервис ?
От: Svat_P Россия http://svyatoslavpankratov.blogspot.com/
Дата: 27.10.10 21:38
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть форма, достаточно простая. Все что на ней есть — таймер и метод который он вызывает.

А>Нужно все это сделать в виде Windows Service ( в частности под платформу 2003 ). Используется .NET 3.5 .

Посмотрите тут: C# КАК создать приложение Службы WINDOWS (или службу) — http://social.msdn.microsoft.com/Forums/ru-RU/fordesktopru/thread/0d44315f-a3e7-4963-a885-b83a04aba9a6/#df6612cc-3fc8-4bf0-bbe5-bca46e63752f
Re[6]: как переделать WinForms под сервис ?
От: Lexey Россия  
Дата: 28.10.10 10:23
Оценка:
Здравствуйте, v.a.v, Вы писали:

VAV>Я даже не уверен что сервис может быть консольным(с точки зрения C# компилятора) приложением. Но разрабатывать/отлаживать функционал будущего сервиса, удобно именно в виде консольного приложения.


Может. Можно даже довольно легко сделать консольное приложение, которое будет работать либо как сервис, либо как обычное консольное приложение, в зависимости от того, как его запускают (под SCM или "в лоб").
"Будь достоин победы" (c) 8th Wizard's rule.
Re[6]: как переделать WinForms под сервис ?
От: Lexey Россия  
Дата: 28.10.10 10:29
Оценка:
Здравствуйте, Jolly Roger, Вы писали:

JR>Подозреваю, что это не предубеждения, а опыт То, что работает в сонсольке, то в 99% без переделки работает и в сервисе, чего не сказешь о GUI, в котором сильна завязка на message loop.


Сам по себе Message loop не должен создавать никаких проблем — у сервиса есть "своя" нормальная оконная станция. Не стоит только ожидать какого-либо взаимодействия от юзера.
"Нативные" сервисы в виде неконсольных приложений более легковесны, чем их консольные аналоги (нет нужны создавать консоль). Скорее всего, и с .NETовскими все ровно тоже самое. Но привычка делать сервисы консольными — сильная штука. :D
"Будь достоин победы" (c) 8th Wizard's rule.
Re[7]: как переделать WinForms под сервис ?
От: Jolly Roger  
Дата: 28.10.10 11:06
Оценка:
Здравствуйте, Lexey, Вы писали:

L>Сам по себе Message loop не должен создавать никаких проблем — у сервиса есть "своя" нормальная оконная станция. Не стоит только ожидать какого-либо взаимодействия от юзера.


Оконные станции тут ни при чём, они есть всегда, не бывает процессов вне оконных станций. Даже десктоп есть всегда, который хотя-бы, в отличии от станций, имеет отношение к передаче сообщений. Разница заключатется в самой структуре GUI приложений, которые имеют ярко выраженную "событийную" модель и строятся вокруг обработчиков оконных сообщений. Именно это делает их не слишком удобными для отработки логики сервисов. Повторюсь, во избежании недопонимания — их для этого использовать можно, если понимаешь, что делаешь, но часто именно неудобно. Кроме того, не всё, что нормально работает в GUI-приложении, будет также хорошо работать в сервисе. Хороший (но далеко не единственный) тому пример — оконный таймер. Без сомнения, message loop можно вставить и в поток сервиса, да только это как раз и будет неоправданным "утяжелением".

L>"Нативные" сервисы в виде неконсольных приложений более легковесны, чем их консольные аналоги (нет нужны создавать консоль). Скорее всего, и с .NETовскими все ровно тоже самое. Но привычка делать сервисы консольными — сильная штука. :D


Вы зачем-то придумываете то, чего никто не говорил Никто не предлагал делать сервис консольным приложением (на всякий случай, чтобы не путаться в терминологии: консольное приложение — это приложение, в образе которого флаг SUBSYSTEM установлен в значение CONSOLE. Всё, данное определение исчерпывающее). Было предложено отработать логику в консольном приложении, чтобы потом перенести её в сервис. Это фактически стандартный приём, и консоль используется для вывода дополнительной отладочной информации, а также заменяет вывод в eventlog.
"Нормальные герои всегда идут в обход!"
Re[7]: как переделать WinForms под сервис ?
От: v.a.v СССР  
Дата: 28.10.10 13:29
Оценка:
Здравствуйте, Lexey, Вы писали:

L>Может. Можно даже довольно легко сделать консольное приложение, которое будет работать либо как сервис, либо как обычное консольное приложение, в зависимости от того, как его запускают (под SCM или "в лоб").

Верю. Сомневался потому, что не пробовал. Делал так чтобы при запуске "в лоб"(с параметром /install), происходила "самоинсталяция" сервиса. Но компилировалось приложение как оконное(естественно без цикла обработки сообщений, и прочей "инфраструктуры"), консоль была не нужна.

А по поводу:
L>Но привычка делать сервисы консольными — сильная штука. :D
уже ответили
Re[8]: как переделать WinForms под сервис ?
От: Lexey Россия  
Дата: 28.10.10 15:57
Оценка:
Здравствуйте, Jolly Roger, Вы писали:

JR>Вы зачем-то придумываете то, чего никто не говорил Никто не предлагал делать сервис консольным приложением


Это не так. Ты может и не предлагал, хотя твои слова можно интерпретировать иначе.

JR>Было предложено отработать логику в консольном приложении, чтобы потом перенести её в сервис. Это фактически стандартный приём, и консоль используется для вывода дополнительной отладочной информации, а также заменяет вывод в eventlog.


Вот это, ИМХО, уже совершенно лишние телодвижения. Хочется отладочный лог — есть Debug.Write/Print. Или Log4Net можно прикрутить.
"Будь достоин победы" (c) 8th Wizard's rule.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.