【问题标题】:Starting a Windows service in an interactive session在交互式会话中启动 Windows 服务
【发布时间】:2009-05-22 12:17:52
【问题描述】:

一位同事有一个批处理脚本程序,该程序需要在 Windows Server 上以控制台模式运行,以便它可以访问 Windows 交互式会话。服务器会定期自动重启(有一个不相关的闭源应用程序在这台机器上运行,我们无法控制)。重新启动后,他希望自动启动 Windows 交互式会话并运行此脚本,此外该服务还需要访问网络资源(尤其是 CIFS 驱动器)。

这是我们迄今为止尝试过的:

  1. 作为 Windows 服务启动。这失败了,因为 Windows 服务可以要么访问交互式会话或访问网络资源,但不能同时访问两者。
  2. 使用 Microsoft 管理控制台添加脚本以在启动时运行,但这不起作用。
  3. 使用 HKLM 注册表项开始运行此脚本,但它仅在我们手动打开服务器上的远程桌面会话时才会启动。
  4. 创建计划任务。调用的程序无权访问交互式 Windows 会话。

还有其他建议吗? (或者,当他提出这些建议之一时,他可能遗漏了什么?)

【问题讨论】:

  • 为什么需要重启才能回收凌乱的 3rd 方应用程序的资源?干掉它(操作系统会做家务)

标签: windows service batch-file


【解决方案1】:

如果服务上的“与桌面交互”不够用(我见过少数情况不适合),您可以将其与 AutoAdminLogon 结合使用。在 HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon 下创建三个(或四个域)REG_SZ 值:

  • 默认用户名
  • 默认密码
  • 默认域
  • 自动管理登录

AutoAdminLogon 应设置为字符串“1”,其他的不言自明。

显然这存在足以让木星飞过的安全问题。

【讨论】:

  • 这最终成为了解决方案。我们之前尝试过 HKLM 条目,但没有设置 AutoAdminLogin。这是一个安全问题,但由于它们是防火墙后面的服务器场机器,所以它并不是一个真正重要的问题。
  • @JimG 很酷的解决方案,但是我们可以在不以明文形式写入密码的情况下实现这一点吗?
  • 感谢您成为唯一一个在这个问题的各种答案中提出这一点的人。对于一些自动化测试服务器,我们将采用这条路线。我们让我们的代理实例作为服务运行,但最终遇到了需要复杂桌面交互的目标应用程序的阻塞问题......不敢相信这如此困难!
  • 有关此的 Microsoft 文档:docs.microsoft.com/en-us/troubleshoot/windows-server/… > 您可以使用 Sysinternals 工具 AutoLogon 更轻松地启用此功能。此工具还可以帮助您使用加密版本的密码。
  • 我还必须设置 DefaultDomainName。我将其设置为我们的短域名,并将 DefaultDomain 设置为我们的 FQDN。
【解决方案2】:

您是否尝试过让脚本作为 Windows 服务运行,但允许它与桌面交互?

具体来说:

  1. 转到服务属性页面
  2. 点击“登录”标签
  3. 选择“本地系统帐户”
  4. 选中“允许服务与桌面交互”

【讨论】:

  • 他已经试过了。不幸的是,登录到本地系统帐户会阻止脚本访问网络资源,这是我们需要能够做到的。 (我会更新问题以反映这一点。)
【解决方案3】:

查看我的类似问题和真实答案:How to start a process from windows service into currently logged in user's session 注意:“与桌面交互”复选框根本不够用。

【讨论】:

    【解决方案4】:

    我建议以另一种方式进行。您可以构建另一个通过 IPC 与 Windows 服务通信的 Windows 应用程序,这可能是处理封闭源应用程序的方法。但如果必须,您可以在服务中指定一个选项(您可以通过 MMC、注册表等执行此操作)。基本上,您可以通过转到计算机管理->服务和应用程序->服务->右键单击您的服务->将帐户更改为本地系统并选中“允许系统与桌面交互”来查看此选项。

    不过,我还是建议您选择另一条路径。

    【讨论】:

      【解决方案5】:

      我最近不得不做类似的事情;我发现但由于安全问题而放弃的一条路线是将交互式服务设置为在交互模式下运行,然后在 win32 API 中运行 ImpersonateUser 函数,我认为将提供以下好处LocalSystem 提供的用户和交互式会话。

      不用说,如果有人闯入这样做的服务,他们将完全控制机器。

      【讨论】:

        猜你喜欢
        • 2017-06-17
        • 2016-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多