【问题标题】:How to start a process from within a windows service如何从 Windows 服务中启动进程
【发布时间】:2010-04-12 20:29:23
【问题描述】:

我想从 windows 服务中弹出一个带有给定 url 的浏览器。像这样:

System.Diagnostics.Process.Start("http://www.venganza.org/");

在控制台中运行但不能在服务中运行时可以正常工作。没有错误消息,没有异常, Process.Start() 命令似乎什么都不做。它闻起来有些安全问题,可能是服务属性和/或登录选项的问题?烦人的东西……有人吗? (哦,在 Windows 7/.NET 框架 3.5 上。)

【问题讨论】:

标签: process service


【解决方案1】:

服务不应该向用户弹出任何内容。不要对服务执行此操作。

您可能还需要提升权限才能执行此操作。您必须以用户身份登录。

即使您设法做到这一点,也不要这样做。这不是服务的目的,这确实是一种糟糕的做法。如果你真的想弹出一些东西,那就有一个单独的过程。

【讨论】:

    【解决方案2】:

    它正在弹出,但在与服务关联的 Window Station 上。

    我建议您调整您的设计,使您的服务不需要以这种方式进行交互。有一些方法可以让它出现在交互式桌面上(你必须处理诸如冒充相关用户、在没有人登录或超过一个人登录时定位正确的桌面等问题)

    【讨论】:

    • 与服务关联的 WindowStation 通常不是交互式的,请参阅msdn.microsoft.com/en-us/library/ms687105%28VS.85%29.aspx。并且不要忘记一台机器上可能有多个用户会话。如何决定哪个用户应该看到窗口?
    • @0xA3 这就是为什么我说如果你真的想走这条路,就要解决这些问题。
    【解决方案3】:

    顺便说一句,Windows 服务不是为交互性而构建的。它们用于处理幕后类型的东西。但是,您是否尝试过在服务本身上启用 Interact with Desktop 选项?

    【讨论】:

    • 哦,是的,我已经尝试过“与桌面交互”选项。没用。我已经同意从服务中弹出 gui 是一个坏主意。但随后出现了一个新问题:“与桌面交互”选项有什么用?
    • 我相信它是技术上的测试,因为它确实允许服务与 GUI 应用程序交互。也许控制台应用程序不被视为服务的 GUI?为了清楚起见,请使用表单应用程序尝试一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    相关资源
    最近更新 更多