c# - 从 Windows 服务启动浏览器

标签 c# .net windows windows-services

我对 Microsoft 世界有点陌生。我读过this回答和许多其他链接,我知道在 Vista 之后,Windows 服务无法与桌面交互。

但是,我遇到了紧急情况,必须快速找到解决方法。我需要我的 Windows 服务以某种方式打开带有 URL 的浏览器(目前任何一种丑陋的 hack 都可以)。 答案是:

you need to write a separate agent application, which will be automatically started on user login, and with which your service will communicate. Then the agent can start the browser or do whatever else you need.

有人可以向我解释一下如何以简单的方式做到这一点吗?该服务将如何与该“代理”对话?这个“代理”到底是什么?

如有任何链接或建议,我们将不胜感激。

编辑:目前。我的服务尝试运行以下代码:System.Diagnostics.Process.Start("www.google.com");

后来我发现,这是行不通的

最佳答案

是的,您可以通过服务在桌面上运行代码...问题是在哪个桌面上?因为可能有多个用户同时登录(例如,在 Windows 服务器中,可能有多个用户远程登录)。

如果在您的示例中从服务使用 Process.Start:

System.Diagnostics.Process.Start("www.google.com");

该程序不会出现在任何用户的桌面上,因为该服务不与任何用户的桌面关联。


解决方案是检测哪个用户在本地登录,然后以该用户身份(并在该用户的权限下)执行程序。为此,我想将您链接到 another of my answers我在这里演示了如何从服务调用程序。 that answer我提供了此技术所需的代码

注意:该答案是关于屏幕截图的,我描述的技术仍然是在用户 session 中调用程序,并且该方法通过服务工作。所以它适用于你的问题。

您可以使用此方法直接执行所需的浏览器。作为替代方案,您可以使用它来调用您的服务可执行文件,您可以在其中使用 System.Environment.UserInteractive检测可执行文件是否未作为服务运行。如果您将 url 作为执行参数传递给您的服务可执行文件,那么您可以使用默认浏览器打开它 Process.Start就像你上面的例子。

注意:代码已在 Windows 7 上测试。

关于c# - 从 Windows 服务启动浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15595823/

相关文章:

c# - Azure Functions - C# - 运行外部应用程序?

c# - 如何使用 MVC5 和 Entity Framework 使用自定义属性更新 IdentityUser

c# - 按特定项目对枚举类型列表的成员进行排序

.net - 以编程方式从 Word 2007 文档中提取宏 (VBA) 代码

C# WebBrowser 控制 System.AccessViolationException

c# - 剥离后如何从网络上获取图像文件扩展名?

c++ - 如何将鼠标点击和拖动发送到后台的另一个程序?

c# - Windows IoT上的多线程导致线程关闭

c# - .Net Core 2.0 中不能覆盖 OnActionExecuted 方法

java - 使用java注销计算机