通过WCF打开IE

本文关键字:IE 打开 WCF 通过 | 更新日期: 2023-09-27 18:22:38

我有一个WCF服务托管在Windows服务中。

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

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

我将Windows服务作为本地系统安装,但当我试图调用该方法时,除了一行重要的内容外,所有内容似乎都在执行。。。IE没有打开。

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

知道为什么吗?

通过WCF打开IE

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

"为了让服务真正显示用户界面,你必须在计算机管理中设置服务,使其能够与桌面交互。在计算机管理的服务窗口中,转到服务的属性,然后在登录选项卡上,选中"允许服务与桌面交互"

由于Windows Vista MS已经添加了许多与安全相关的更改,特别是在Windows服务不能/不能做的领域。任何"桌面式"的东西(打印、访问网络共享、使用Office Interop等)都越来越难工作。

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

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

  • 承载WCF服务的普通桌面进程

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

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

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