1

是否可以从 Windows 服务启动 Web 浏览器?我在 C# 中创建了一个基本服务并将其安装在“LocalSystem”安全配置文件下。

该服务的代码如下所示:

namespace Bootloader
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            string target = "http://www.microsoft.com";
            System.Diagnostics.Process.Start(target);
        }

        protected override void OnStop()
        {
        }
    }
}

当服务运行时,什么也没有发生。Windows 服务的文档说它们没有任何 UI,但这是否意味着无法启动 Web 浏览器。

4

4 回答 4

5

只有在 XP 和更低版本中才有可能。在 Vista 中,Windows 服务完全运行在单独的桌面上。您必须在用户桌面上运行一些东西才能完成此操作。

编写一个带有隐藏窗口的应用程序,该窗口在启动时启动作为一种解决方法。

于 2010-02-24T23:40:42.990 回答
0

我不认为这是可能的。我知道,如果你想运行 Watin(在浏览器实例中运行的功能测试),如果它作为服务运行,则不能从我的 CI 环境运行,但前提是它作为应用程序运行。

于 2010-02-24T23:41:54.430 回答
0

我相信可以做到,但是您需要做额外的工作才能处理进程隔离模型(窗口站和桌面)。看看这个页面:Process Connection to a Window Station。由于您无法修改浏览器,您可能需要编写一个 shim 来更改上下文,然后调用浏览器。

一种解决方法是将您的服务作为交互式服务运行,但这已被弃用,并且不适用于较新版本的 Windows。

于 2010-02-24T23:54:47.003 回答
0

明确禁止服务与用户交互。由于 Vista 这是强制执行的,请参阅交互式服务

从 Windows Vista 开始,重要 服务无法直接与用户交互。因此,不应在新代码中使用标题为“使用交互式服务”一节中提到的技术。

解决方案是将交互部分分离到一个正常的进程中,该进程在用户会话开始时启动(即启动程序)。然后,该进程可以通过其选择的 IPC(共享内存、网络管道、TCP 等)与服务通信。该服务可以在需要时指示该进程启动程序。

于 2010-02-25T00:00:38.513 回答