Windows 任务调度:处理执行帐户的密码更改

Windows Task Scheduling : handling password change of execution account

我创建了一个 Installshield MSI,它在 WinServer 2008 或 Vista(或更高版本)上部署了几个 .NET 控制台应用程序 Windows OS.

安装过程在本地管理员帐户下 运行。

在安装过程中,Installshield MSI 提示管理员输入密码,并在 DOS 命令中使用此密码创建多个计划任务,这些任务将在管理员下编程、运行 并执行帐号。

我忍不住觉得有更好的方法来处理这些任务的创建,而无需询问密码或可能使用 SYSTEM 帐户并且不会创建安全漏洞。

安装帐户的密码也可能过期,因此我正在尝试找出一种更实用的方法来创建这些计划任务。

计划的任务必须启动访问 SQL CE 4.0 数据库的 .NET 控制台应用程序,为外部邮件服务器创建 SMTP/POP3 客户端,在本地系统 HD 中写入文件。

任何link或对如何执行最佳实践计划任务创建的帮助表示赞赏,

此致,

我假设您正在调用 SCHTASKS 来创建计划任务。

选项 1:使用 SYSTEM 帐户

SCHTASKS /Create /RU SYSTEM /SC DAILY /ST 00:00:00  /TN "MyTaskName" /TR "MyConsoleApp.exe"

这是推荐的方法,但它有一些限制:

  1. 该程序可以匿名访问数据库和电子邮件,或使用其他程序, 预定义帐户。
  2. 该程序不需要用户特定的环境变量或注册表设置。
  3. 该程序在 应用程序正在写入的文件夹(安装可以处理)。

选项 2:使用特定帐户

SCHTASKS /Create /RU username /RP password /SC DAILY /ST 00:00:00  /TN "MyTaskName" /TR "MyConsoleApp.exe"

如果您依靠应用程序的用户上下文来登录数据库和发送电子邮件,通常的方法是在安装开始时要求用户提供凭据,并提醒他任何未来的密码更改也将需要更新相关的计划任务。这还有其他含义:

  1. 必须将 'disabledomaincreds' 安全策略设置为 false 命令工作(你可以将它设置回它的原始值 在 运行 它之后)。您可以通过阅读来查看和更改政策 并编辑下的注册表值 HKLM\System\CurrentControlSet\Control\Lsa

  2. 用户必须有'Logon as batch'权限。这可以通过 运行 来完成:ntrights.exe +r SeBatchLogonRight -u "username"