通过WCF打开IE

我有一个Windows服务托管的WCF服务。

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

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

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

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

知道为什么吗?

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

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

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

  • 托管WCF服务的普通桌面进程

要么

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

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

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

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

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