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

Jam*_*mes 1 automation windows-services winforms

我看过几篇帖子,主要说明UI组件不应该作为服务运行.我理解没有人可以响应UI事件等的理性但事实仍然是许多自动化任务只有Windows窗体才有可能.

这里有几个很好的例子:

  1. 我想构建一个url爬虫服务,它可以制作网页的缩略图.目前,我认为实现这一目标的唯一方法是尝试自动化.Net WebBroswer组件.

  2. 自动打印MS-Word文档.

在Vista之前有一些技巧来解决这个问题,但现在没有.我的问题是为什么会出现这种情况,还有什么替代方案呢?

小智 6

Lookup Shatter AttacksSession 0隔离功能.

基本上,如果两个进程(不同用户)共享同一个桌面,则一个进程可以通过发送Windows消息来潜在地执行其他进程中所需的任何代码,这称为破碎攻击.

有很多关于这是否是设计错误的讨论,并且在Vista之后,微软决定删除任何交互式桌面对服务的支持,因为这是一个潜在的安全漏洞.

作为替代方案,您可以考虑将图像生成/打印代码作为登录用户运行,该用户可以访问交互式桌面.