以 Windows 登录用户身份从服务启动进程

Posted

技术标签:

【中文标题】以 Windows 登录用户身份从服务启动进程【英文标题】:Starting process from service as windows login user 【发布时间】:2019-08-02 14:44:26 【问题描述】:

我有一个要从服务中启动的进程。该服务在本地系统帐户下运行,因为用户的密码每 3 个月更改一次。该进程在使用本地系统帐户启动时不起作用,因此它必须在 Windows 登录用户下运行。 当然,我无法在服务中输入用户密码,因为它正在更改。 有没有办法在登录用户下启动进程? 我没有找到是否可以将 WindowsIdentity 与 StartInfo 一起使用。 谢谢

【问题讨论】:

为什么需要服务启动?考虑在用户登录时从 Windows 调度程序启动它 问这个问题的更好的地方可能是superuser.com 【参考方案1】:

自Windows Vista 以来,服务被禁止访问桌面(它们没有交互式会话)。虽然您可以覆盖它,但不建议这样做。您仍然可以使用Process class 从服务中通过交互式会话启动程序。但正如你所说,没有用户帐户,这对你没有帮助。

在 Vista 中,我们还得到了Windows Task Scheduler 2.0。它非常先进,可以在登录时进行操作(使用登录用户凭据)。以前由服务完成的一大堆操作实际上已经移入了Sheduler。 https://www.sevenforums.com/tutorials/67503-task-create-run-program-startup-log.html

【讨论】:

谢谢。我需要解决的问题是该过程每隔几天随机停止一次。我想每分钟检查一次它是否正在运行并重新启动它。当我开始考虑修复时,我不认为从服务启动它会是一个问题。 @TamirBerger:您应该做的是调试为什么它会中断。如果你缺少调试信息,我可以给你我最喜欢的两篇关于异常处理的文章:blogs.msdn.microsoft.com/ericlippert/2008/09/10/… | codeproject.com/Articles/9538/… 这些对获取有用的调试信息很有帮助。 @TamirBerger:至于您的问题:只需创建一个后台任务来监视主程序。没有理由使用服务管理器重新启动。

以上是关于以 Windows 登录用户身份从服务启动进程的主要内容,如果未能解决你的问题,请参考以下文章

如何以与 Windows 服务不同的用户身份运行进程

如何从 Windows 服务启动进程到当前登录的用户会话

如何从Windows服务启动进程到当前登录的用户会话

在 ASP.NET 中以不同用户身份启动进程

SQL Server 新安装启用sa用户/sa用户登录提示管道另一端无进程

如何在启动时启动 Docker 守护进程(Windows 服务)而无需登录?