【问题标题】:Opening IE through WCF通过 WCF 打开 IE
【发布时间】:2012-02-05 02:21:28
【问题描述】:

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

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

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

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

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

知道为什么吗?

【问题讨论】:

  • 在互联网上搜索“会话 0 隔离”。这将使您朝着正确的方向开始。
  • 你想通过打开 IE 来达到什么目的?使用WebClient/HttpWebRequestHtmlAgilityPack 可以更好地完成这件事吗?
  • 我打开的 URL 应该会打开我的 IE 插件

标签: c# wcf windows-services


【解决方案1】:

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

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

【讨论】:

  • 我做到了,但它仍然无法打开 IE
  • 我将服务权限更改为“允许服务与桌面交互”,但仍然无法打开 IE
【解决方案2】:

自从 Windows Vista 以来,MS 一直在添加许多与安全相关的更改,尤其是。在 Windows 服务可以/不能做的领域。任何“类似于桌面”的东西(打印、访问网络共享、使用 Office 互操作等)都越来越难以开始工作。

您应该重新考虑您的设计,因为恕我直言,任何“类似服务器的进程”(例如 WCF 服务)都可以由多个请求并行访问,因此不应使用不是为此类交互设计的进程...如果您的网络服务以这种方式启动多个 IE 实例会发生什么? IE 会按照您的需要/预期运行吗?

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

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-14
      • 2015-05-04
      • 1970-01-01
      • 1970-01-01
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多