Служба Windows, уведомляющая пользователя о том, что WPF-элемент управления стилями Outlook не становится видимым - PullRequest
0 голосов
/ 11 февраля 2009

Обновление: Мы все еще используем XP на работе, и мое решение работает, но теперь, зная, что Vista и более поздние версии имеют изолированную сессию, я собираюсь реализовать WCF IPC ...

У меня есть служба Windows, которая должна уведомлять пользователя о событии какого-либо типа. Я решил, что что-то похожее на уведомления по электронной почте будет иметь смысл. Также имеет смысл сделать такой простой пользовательский интерфейс с использованием WPF. Это позволило бы мне изучить некоторые основы.

Я запускаю тему:

Thread thread = new Thread(new ThreadStart(RunUserNotificationOnIndependantThread));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();

Затем я настраиваю объект и вызываю метод, который вызывает DoubleAnimation.BeginAnimation

private void RunUserNotificationOnIndependantThread()
    {
        UserNotificationWithImage test = new UserNotificationWithImage();

        test.Title = _title;
        test.Url = _url;
        test.Message = _message;

        test.LoadUserNotification();
    }

    public void LoadUserNotification()
    {
        Rect workAreaRectangle = System.Windows.SystemParameters.WorkArea;
        Left = workAreaRectangle.Right - Width - BorderThickness.Right;
        Top = workAreaRectangle.Bottom - Height - BorderThickness.Bottom;

        _fadeInAnimation.Completed += new EventHandler(_fadeInAnimation_Completed);

        // Start the fade in animation
        BeginAnimation(UserNotificationBase.OpacityProperty, _fadeInAnimation);
    }

Отладчик достигает BeginAnimation (...), и окно не появляется. Это вообще возможно или что я делаю неправильно, пытаясь это сделать?

Код UserNotification основан на блоге Никке Андерссон: Блог WPF Desktop Alert

Спасибо за любую помощь !!

Ответы [ 2 ]

4 голосов
/ 11 февраля 2009

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

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

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

1 голос
/ 11 февраля 2009

Вообще говоря, я бы не рекомендовал службе Windows напрямую взаимодействовать с рабочим столом пользователя. В качестве простого примера возникают проблемы, поскольку служба может запуститься до того, как в систему войдет любой пользователь. Я бы предложил создать небольшое приложение, которое запускается во время сеанса пользователя и связывается со службой Windows через IPC (межпроцессное взаимодействие), например WCF.

Но если вы действительно хотите попытаться запустить его, моя подсказка будет включать «Разрешить взаимодействие с рабочим столом» для службы, и я, кажется, помню, что этот переключатель вообще не работает в Vista, но кто-то еще должен подтвердить это.

НТН Alex

...