在交互式会话中启动Windows服务

时间:2009-05-22 12:17:53

标签: windows service batch-file

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

这是我们到目前为止所尝试的内容:

  1. 以Windows服务身份启动。这失败了,因为Windows服务 可以访问交互式会话到网络资源,但不能同时访问。
  2. 使用Microsoft管理控制台添加要在启动时运行的脚本,但这不起作用。
  3. 使用HKLM注册表项开始运行此脚本,但只有在我们手动打开服务器上的远程桌面会话时才会启动它。
  4. 创建计划任务。调用的程序无法访问交互式Windows会话。
  5. 还有其他建议吗? (或者,当他提出其中一条建议时,他可能错过了什么?)

5 个答案:

答案 0 :(得分:4)

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

  • DefaultUsername
  • DefaultPassword
  • 默认域
  • AutoAdminLogon

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

显然,这个安全问题足以让木星飞过。

答案 1 :(得分:1)

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

具体做法是:

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

答案 2 :(得分:0)

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

然而,我再次建议选择其他路径。

答案 3 :(得分:0)

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

毋庸置疑,如果有人闯入这样做的服务,他们就可以完全控制机器。

答案 4 :(得分:0)

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