首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么不能在Windows服务中使用UI组件(Windows窗体)?

为什么不能在Windows服务中使用UI组件(Windows窗体)?
EN

Stack Overflow用户
提问于 2010-07-20 21:16:57
回答 3查看 135关注 0票数 1

我看过几篇文章,它们本质上说UI组件不应该作为服务运行。我理解没有人能够对UI事件等做出响应的rational,但事实仍然是,只有Windows窗体才能实现许多自动化任务。

下面是几个很好的例子:

  1. 我想建立一个网址爬虫服务,使缩略图的网页。目前,我看到实现这一目标的唯一方法是尝试并自动化.Net WebBroswer组件。
  2. 自动打印MS-Word文档。

在Vista之前,有一些技巧可以绕过这个问题,但现在却没有了。我的问题是,为什么会出现这种情况?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-20 21:17:52

查找粉碎攻击会话0隔离特性

基本上,如果两个进程(不同用户的进程)共享同一个桌面,一个进程可以通过发送windows消息在另一个进程中执行它想要的任何代码,这被称为粉碎攻击。

很多人都在讨论这是否是一个设计缺陷,微软决定删除对服务的任何交互式桌面支持,因为这是一个潜在的安全漏洞。

作为另一种选择,您可以考虑将映像生成/打印代码作为登录用户运行,用户可以访问交互式桌面。

票数 6
EN

Stack Overflow用户

发布于 2010-07-20 23:28:53

就像莫伦所说的,最好的办法就是不要把它当作一种服务来运行。

但是可能会被困在一个服务中运行它,不管怎么说,,因为有一个现有的框架,您需要运行您的代码。

因此,解决方法是编写一个以登录用户身份运行的服务器程序,,您将从代码中命中该服务器程序--必须在服务中运行。服务器将完成工作并返回结果。

您可以使用WCF在命名管道上使用WCF作为传输或任何工作。如果没有,您可以在本地主机上使用裸命名管道或tcp/ip。从你的网站在你的用户档案,你应该知道所有关于本地主机!

票数 1
EN

Stack Overflow用户

发布于 2010-07-20 21:26:40

从技术上讲,UI组件需要启动Windows消息队列才能工作。您可以从windows服务运行它(据我所知,此功能在Windows及更高版本中禁用)。

但是你说的不是UI组件,而是COM组件,您可以使用它。至少MS Office,但微软不推荐它,因为内存泄漏是可能的。最新的MS Office有服务器版本,可以在没有用户界面的应用程序中使用。

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

https://stackoverflow.com/questions/3294425

复制
相关文章

相似问题

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