通过WCF打开IE

时间:2012-02-05 02:21:29

标签: c# wcf windows-services

我在Windows服务中托管了WCF服务。

这个服务WCF有一个metohd,在这个方法中我有一个重要的路线:

 Process Browser = Process.Start("iexplore.exe", hostUrl);

我将Windows服务安装为本地系统,但是当我尝试调用该方法时,一切似乎都在执行,除了一条重要的行......并且IE没有打开。

我想补充一点,该方法本身不在服务本身,而是在一个服务dll引用中

知道为什么吗?

3 个答案:

答案 0 :(得分:4)

http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/63a7d1ec-7077-489a-a250-f7422f04317b

“为了使服务实际显示UI,您必须在计算机管理中设置服务以允许它与桌面交互。在计算机管理的服务窗口中,转到您的属性服务,然后在“登录”选项卡上,选中“允许服务与桌面交互”“

答案 1 :(得分:3)

由于Windows Vista MS一直在添加许多与安全相关的更改esp。在该区域Windows服务可以/不能做什么。任何“像桌面一样”(打印,访问网络共享,使用Office Interop等)都越来越难以开始工作。

您应该重新考虑您的设计,因为IMHO可以通过多个请求并行访问任何“类似服务器的进程”(例如WCF服务),因此不应使用非此类交互设计的进程...如果您的webservice以这种方式启动多个IE实例会发生什么? IE会按照您的需要/期望行事吗?

如果你真的必须这样做,你应该

  • 托管WCF服务的常规桌面进程

OR

  • 两个进程,一个是您的Windows服务,另一个是作为处理IE的正常桌面进程运行...这两个进程通过IPC进行通信

答案 2 :(得分:1)

服务运行的用户是什么?尝试在当前登录的用户下运行它,具有与桌面交互的权限,看看是否有帮助。

一般来说,让服务启动GUI流程并不是一个好主意。例如,如果没有人登录,该怎么办?如果有很多人登录怎么办?它应该在所有会话中打开......等等。您是否考虑在服务上公开一个简单的(例如Net.NamedPipes)端点,并编写一个小客户端UI来与之交互?