avnish kumar maddheshiya Ответов: 3

Эквивалент службы окон для функций onhandlecreated & wndproc (от C#)


Существует ли какой-либо эквивалент для функций OnHandleCreated & WndProc для службы окон, аналогичной той, что используется в C# для формы?

Мне нужно реализовать WatchBP SDK(USB Library) для служба окон, которая работает с WebSocket для получения данных с устройства в веб-интерфейс.

в SDK ниже методы нужно реализовать но эти методы не вызываются в оконной службе поэтому уведомление не получено от устройства к оконному сервису.

protected override void OnHandleCreated(EventArgs e)
    {
        base.OnHandleCreated(e);
        this.watchBPOfficeHid.RegisterHandle(this.Handle);
        
    }
    protected override void WndProc(ref Message m)
    {
        base.WndProc(ref m);
        this.watchBPOfficeHid.ParseMessages(ref m);
    }


хотя я наследую класс обслуживания окон от System.Окна.Формы.Форма, но выше метод не вызывается.

В WinForms мы могли бы использовать OnHandleCreated, чтобы получить дескриптор, как только он будет создан. Есть ли какая-то альтернатива этому в оконном сервисе?

Любая помощь будет оценена по достоинству.
Заранее спасибо.

Что я уже пробовал:

Is there any equivalent for OnHandleCreated & WndProc functions for a Window Service similar to the one in C# for a form?

3 Ответов

Рейтинг:
1

Garth J Lancaster

Пока ты можешь в теории напишите службу C#, которая использует P/Invoke для этого (управление скрытым окном), я сомневаюсь, что требуемые усилия будут весить против одноразовой ценности этого подхода.

Я думаю, что вам гораздо лучше придерживаться приложения Winforms (или WPF) и демонизировать его (делая его надежным, перезапускаемым, способным минимизировать/скрывать) настолько, насколько это возможно, и/или иметь для него "сторожевой" процесс - на самом деле, если вы запустите его через планировщик задач Windows, вы можете указать параметры, чтобы "сохранить его живым", иначе напишите сторожевую службу для мониторинга/перезапуска вашего приложения


Рейтинг:
0

OriginalGriff

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

В результате они вообще не могут быть успешно выведены из формы.

Вы не можете "обойти" это - сервисы разработаны специально для того, чтобы вообще не иметь никаких компонентов пользовательского интерфейса!


Рейтинг:
0

honey the codewitch

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

c# - разрешить службе Windows взаимодействовать с рабочим столом - переполнение стека[^]

Вместо того чтобы дублировать инструкции, я предоставил вам эту ссылку. Надеюсь, это поможет!

В любом случае, вы *должны* иметь возможность использовать Winforms из вашего сервиса.