我在C#中编写了一个基本上侦听特定端口命令的Windows服务,在大多数情况下会创建一个新的Process类,shell执行所述任务。
我主要想用它来发布媒体。例如。我有一个名为c:\media.avi
的媒体文件 - >从远程客户端发送“-launch c:\media.avi
”,服务器在进程类中启动它。简单!
我遇到的问题是,当服务在 localsystem 上下文中运行时,avi将在其本机应用程序中运行,例如,windows media player但是根本没有声音。
在我的用户帐户上下文 [提供UN和PW to service]下尝试相同的过程运行.avi文件WITH声音,但我根本看不到窗口。
有谁知道如何让服务在当前登录的用户的上下文中运行 - 这样我才能获得声音和视频?
答案 0 :(得分:2)
尝试更改服务设置以启用“允许服务与桌面交互”,或等效于您的操作系统版本。但请注意,这是不好的做法;服务通常不应与GUI交互,并且这样做的能力(理论上)将在未来的Windows版本中消失。
有其他选择; this article描述了服务与用户会话交互的更简洁方式。但实际上,请考虑申请。
答案 1 :(得分:2)
您正在描述一个应用程序。服务和应用程序之间的根本区别在于服务不在用户会话下运行,不应与之交互。如果您的目标是在用户会话中启动流程,为什么首先选择创建服务?
服务与会话交互的推荐方法是使用专用交互式应用程序,该应用程序从用户会话运行,并通过IPC协议(命名管道,共享内存,套接字等)与服务交互。您可以让您的服务侦听命令,并在收到命令后,将所述命令分派给从连接到服务的感兴趣的会话运行的交互式应用程序。