如何为服务控制器查询的计划任务设置足够的权限?

如何为服务控制器查询的计划任务设置足够的权限?

我是一名程序员,但遇到的问题已经超出了代码的范围,进入了系统管理员的领域,至少目前我是这么认为的。我将只使用一段代码来显示问题的具体位置,我还将提供命令行替代代码的本质功能,以便如果有人希望重现问题,他们可以这样做。我不是系统管理员,但因为我被告知没有某种解决方法就无法做到这一点,所以我决定自己寻找解决方案,这样我就可以继续执行其他任务,而不必重写代码或搜索编程解决方案。我曾考虑过 C sharp 用户和权限模拟,但如果可能的话,我想避免这种情况。

有问题的程序是一个自定义的 C sharp 应用程序 customApp.exe,它在 Server 2003 上作为计划任务运行。问题是我有一个 C sharp 应用程序,它在运行时尽早检查其依赖项。其中一个依赖项作为服务运行。我执行查询以验证服务是否正在运行。检查服务运行状态的操作导致了错误。故障在安全性下的服务器事件日志中作为故障审核记录,并注明权限是故障原因。

存在一个专用服务帐户用于运行 customApp.exe 程序。权限非常有限,但测试运行期间发现足以满足应用程序的要求。当应用程序作为计划任务运行时会遇到问题。

我无法查看失败的计划任务的设置,但我已在调试器中放置了一些检查以验证设置是否正确。基本上,我放入了 whoami 报告代码行来验证用户名和域是否正确。我还知道用户名、域和密码必须正确,因为应用程序与 Microsoft SQL 数据库交互,它使用连接字符串中的集成安全性正确地从该数据库进行选择和插入。我不知道权限设置,但我知道系统管理员将专用服务帐户添加到特定计划任务下的安全选项卡中。

以下是引起争议的 C# 代码片段:

ServiceController sc = new ServiceController("Service Name Here");
            if (sc.Status != ServiceControllerStatus.Running)
            {

这是一个命令提示符替代方案,其基本与代码相同:

sc query "Service Name Here"

使用专用服务帐户登录服务器后运行 customApp.exe 即可成功。使用上述命令提示符“sc query “Service Name Here”登录后同样可成功。当我使用专用服务帐户远程登录服务器时,无需干预即可在指定时间启动 customApp.exe 作为计划任务运行,结果成功。

在任何其他情况下将 customApp.exe 作为计划任务运行都会导致失败。这可能是最让我困惑的部分。如前所述,当我使用专用用户帐户远程登录时,它会作为计划任务成功运行,否则会失败。

值得注意的是,我并没有尝试启动或停止 Windows 服务。我发现这需要管理员权限,而我对利用这种权限不感兴趣。我坚信以完成工作所需的最少权限来运行应用程序。

答案1

您需要将任务计划程序配置为以特定用户身份运行。在任务计划程序中单击操作下拉菜单,然后选择“AT 服务帐户配置”。将其从系统帐户更改为“另一个用户帐户”,然后将其更改为您希望命令在其下运行的帐户。

您可能需要指定一个不需要更改密码的帐户,这样您就不必每次都重新配置任务计划程序。

相关内容