【问题标题】:Find "Allow service to interact with desktop" checked (in the service properties) of Windows Service找到Windows服务的“允许服务与桌面交互”选中(在服务属性中)
【发布时间】:2011-12-22 12:51:57
【问题描述】:

我在 Windows 服务中使用捕获屏幕,所有代码在 win 表单中都能正常工作,但在 win 服务中返回黑色图片所以我搜索并找到 this 并尝试找到“允许服务与桌面交互”选中(在服务属性),但没有任何具有该名称的属性。有什么想法吗?我如何/在哪里可以找到它?我使用的是 Windows Server 2008 R2 SP1 和 VS2010 和 C#4,如果这个版本没有任何属性,我该怎么办?

【问题讨论】:

  • 这里要问的真正问题是为什么 [您认为] 首先需要 Windows 服务。是的,您可以使用 David 的解决方案并咬紧牙关尝试让 IPC 在标准用户模式应用程序和服务之间进行通信,但几乎没有任何意义。只需创建一个不显示窗口的标准 Windows 应用程序。您将不受限制地享受服务的所有好处(从您的角度来看)。这是一个非常特殊的案例,确实有人需要 Windows 服务。我不知道为什么每个人都认为他们这样做。

标签: c# windows-services


【解决方案1】:

该设置是旧设置,无法解决您的问题。从 Vista 开始,您的服务无法访问交互式桌面,您需要从交互式桌面上运行的标准应用程序执行屏幕捕获。

您可以使用 IPC 机制在您的服务和桌面应用程序之间进行通信。您可以从服务启动此桌面应用程序,但操作起来相当棘手,正如 here 所解释的那样。

勾选“允许服务与桌面交互”只是意味着您可以正确调用交互式 API 函数。您无法访问不活跃的桌面。此问题均源于 Vista 中引入的更改,这意味着服务在隔离会话(会话 0)中运行。

【讨论】:

    【解决方案2】:

    要设置此属性,您必须打开 Windows 服务管理,右键单击您的服务并打开属性。之后选择“登录”选项卡。当您的服务在本地系统下运行时,您可以选择“允许服务与桌面交互”。

    【讨论】:

    • Windows XP ! 10年前就是这样。该复选框不再起作用。是时候升级到现代版 Windows 了。
    • @lmw 您可以在 win 7 上选中该框,它只是没有按照您的想法进行
    • 我在公司开发了几个 OPC 服务,每个人都需要这个属性。如果未选中,则该服务无法在前台打开本地计算机上的其他进程(我的意思是显示一个 winform,而不仅仅是一个后台进程)。但这听起来很有趣,你有关于你论文的链接或博文吗?
    • 这里解释得很详细,包括漂亮的图片:stackoverflow.com/a/4516515/366904 并检查“相关”部分中的所有链接。这不是我和大卫发明的。
    • 关于会话 0 隔离的帖子数不胜数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 2010-10-07
    • 2013-11-19
    相关资源
    最近更新 更多