Windows服务通知用户WPF outlook样式控件不可见

Windows服务通知用户WPF outlook样式控件不可见,wpf,wcf,windows-services,remoting,Wpf,Wcf,Windows Services,Remoting,更新:我们仍在使用XP,我的解决方案也在运行,但现在知道Vista和以后的版本有了独立的会话,我将实现一个WCF IPC 我有一个windows服务,需要在发生某种类型的事件时通知用户。我认为类似于电子邮件通知信息的东西是有意义的。使用WPF实现这样一个简单的UI也是有意义的。这会让我学到一些基础知识 我运行一个线程: Thread thread = new Thread(new ThreadStart(RunUserNotificationOnIndependantThread)); thre

更新:我们仍在使用XP,我的解决方案也在运行,但现在知道Vista和以后的版本有了独立的会话,我将实现一个WCF IPC

我有一个windows服务,需要在发生某种类型的事件时通知用户。我认为类似于电子邮件通知信息的东西是有意义的。使用WPF实现这样一个简单的UI也是有意义的。这会让我学到一些基础知识

我运行一个线程:

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(…)并且不显示任何窗口。这可能吗?或者我在尝试这一点时做错了什么

用户通知代码基于Nicke Andersson的博客:


谢谢你的帮助

一般来说,我不建议Windows服务直接与用户的桌面交互。举个简单的例子,出现问题是因为服务可能在任何用户登录之前启动。我的建议是创建一个小应用程序,该应用程序通过用户会话启动,并通过IPC(进程间通信)如WCF与Windows服务通信

但是如果你真的想让它运行,我的提示是打开服务的“允许与桌面交互”,我似乎记得这个开关在Vista下根本不起作用,但是其他人应该确认一下


alex

一般来说,我不建议使用Windows服务直接与用户的桌面交互。举个简单的例子,出现问题是因为服务可能在任何用户登录之前启动。我的建议是创建一个小应用程序,该应用程序通过用户会话启动,并通过IPC(进程间通信)如WCF与Windows服务通信

但是如果你真的想让它运行,我的提示是打开服务的“允许与桌面交互”,我似乎记得这个开关在Vista下根本不起作用,但是其他人应该确认一下


alex

在XP上,与桌面交互的服务有两个严重的问题需要克服——当没有用户登录时该怎么办,当多个用户登录时该怎么办(快速用户切换和终端服务是登录多个用户的两种最常见的方式)

在Vista上,出于安全原因,服务运行在它们自己的独立桌面上,因此您显示的任何UI都将运行在用户无法访问的特殊桌面上


您应该编写一个运行在用户桌面上的小型Gui程序,并使用某种类型的IPC(远程处理、Soap、Rest、命名管道、文件等)与服务通信.

在XP上,与桌面交互的服务有两个严重的问题需要克服——当没有用户登录时该怎么办,当多个用户登录时该怎么办(快速用户切换和终端服务是登录多个用户的两种最常见的方式)

在Vista上,出于安全原因,服务运行在它们自己的独立桌面上,因此您显示的任何UI都将运行在用户无法访问的特殊桌面上


您应该编写一个运行在用户桌面上的小型Gui程序,并使用某种类型的IPC(远程处理、Soap、Rest、命名管道、文件等)与服务进行通信。

感谢您的帮助,我没有意识到隔离桌面的存在。我会让它工作的。这是有道理的,这将需要IPC。谢谢你的帮助,我没有意识到关于孤立的桌面。我会让它工作的。这需要IPC,这是有道理的。