从Windows服务启动Web浏览器

时间:2010-02-24 23:37:25

标签: c# windows service process.start

是否可以从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 个答案:

答案 0 :(得分:5)

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

使用隐藏窗口编写应用程序,该窗口在启动时作为解决方法启动。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

解决方法是将您的服务作为交互式服务运行,但这已被弃用,并且在较新版本的Windows中无法使用。

答案 3 :(得分:0)

明确禁止服务与用户交互。自Vista实施以来,请参阅Interactive Services

  

重要服务不能直接   从Windows开始与用户交互   Vista系统。因此,技术   在标题为使用的部分中提到   互动服务不应该   用于新代码。

解决方案是将活动部分分离为在用户会话启动时启动的正常过程(即启动程序)。然后,此过程可以通过其选择的IPC(共享内存,网络管道,TCP等)与服务进行通信。该服务可以指导此过程在需要时启动程序。