首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从Windows服务启动非后台进程?

如何从Windows服务启动非后台进程?
EN

Stack Overflow用户
提问于 2020-02-21 19:31:54
回答 1查看 666关注 0票数 0

我有一个用C#编写的Windows,它使用PuppeteerSharp启动Google浏览器的一个实例。请参阅下面的启动代码:

代码语言:javascript
运行
复制
string[] chromeArgs = { "--remote-debugging-port=9222" };
Browser browser = await Puppeteer.LaunchAsync(new LaunchOptions()
{
    ExecutablePath = "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe",
    DefaultViewport = null,
    Args = chromeArgs,
    Headless = false // <-- this is important!
});

尽管我是在无头模式下启动浏览器,但我没有看到Chrome浏览器实际上是在我的机器上启动的。我已经确认浏览器确实会启动,因为我看到它出现在任务管理器中。

我怀疑Chrome浏览器是不可见的,因为它是从作为后台进程的Windows服务启动的,因此Chrome是作为后台进程自动启动的。是否可以将Chrome作为一个非背景进程启动,这样我就可以看到它了吗?如果是,怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-21 20:46:39

我怀疑Chrome浏览器是不可见的,因为它是从作为后台进程的Windows服务启动的,因此Chrome是作为后台进程自动启动的。是否有可能启动Chrome作为一个非背景的进程,这样我就可以看到它?如果是,怎么做?

Win32服务与用户可视应用程序在单独的会话中运行。。除其他原因外,这还防止了称为粉碎攻击的安全漏洞。因此,它不仅在不同的桌面上,而且在不同的桌面上,在不同的Windows站点上,在不同的用户会话中。

虽然存在允许显示来自Win32服务的UI的Win32,但不应该使用黑客。它需要降低整个系统的安全性,特别是降低该服务的安全性,并且可能停止使用任何未来的Windows Update。

对“如何显示来自Win32服务的UI”的正确响应是“您不”。有几种选择:

  1. 你真的需要Win32服务吗?也许它应该只是一个普通的应用程序,是自动运行的登录?通常,使用Win32服务是因为它们可以在没有登录的情况下运行,但是在这种情况下,如果没有用户登录,那么您将在哪里显示UI呢?因此,首先,考虑您的应用程序是否真的应该是Win32服务。
  2. 如果您确实需要一个Win32服务,并且需要显示一个UI,那么正确的架构是将现有的应用程序拆分为一个Win32服务和一个单独的可执行文件,在登录时运行。当Win32服务想要显示UI时,它使用某种形式的进程间通信来告诉自动运行应用程序显示实际的UI。

注意,使用选项(2),您还需要决定如何处理有多个登录用户(例如远程桌面会话)的情况,并确定要在哪个会话上显示UI。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60345158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档