2008 R2 任务计划程序无法运行任务,但显示已成功完成且无错误

2008 R2 任务计划程序无法运行任务,但显示已成功完成且无错误

旧描述:

我有一个自己编写的 .NET 应用程序,我正尝试将其设置为在 Windows Server 2008 R2 上作为计划任务运行。当我从命令行自己运行该应用程序时,它运行正常。但是,当我设置任务时,它会在启动后 1 秒内完成任务并显示已成功完成,尽管应用程序当然没有运行。因此,调度程序或应用程序都没有记录任何错误。如果我取出参数(“自动”),那么它会“运行”任务,但永远不会打开控制台来显示菜单。

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

  1. 告诉任务直接运行应用程序。
  2. 告诉任务运行运行应用程序的批处理脚本。
  3. 告诉任务使用/C“applocation\appname auto”作为参数打开cmd.exe。
  4. 将任务的所有权更改为专门为运行任务创建的用户帐户(请注意,该用户帐户可以很好地运行其他任务)。
  5. 明确授予该用户帐户对涉及的目录的完全控制权。
  6. 将所涉及目录的所有权更改为同一个用户。
  7. 将应用程序的安全权限更改为始终以管理员身份运行。
  8. 我盯着屏幕,沮丧地摇着头。

我对服务器管理还不是很熟悉,所以可能我忽略了一些东西,但如果我忽略了,我不知道那是什么。我在这里找到了一个问题,似乎与此有关(GUI 不会为计划任务加载),但它有点不同,因为至少那个问题实际上运行了部分任务。

更新:

经过进一步挖掘,我发现该应用程序实际上一直在运行,但由于某些原因,我猜我不知道 .NET 中的默认设置命名空间,配置文件中应用程序存储/读取 Web 服务凭据的位置会根据您是正在运行应用程序还是应用程序正在通过 TS 运行而有所不同。仍在尝试找出解决方法...

无论如何,这就是我现在的情况:每当任务调度程序尝试运行应用程序时,应用程序都会发出 SSL/TLS 错误。我的证书存储在应用程序主目录 (E:\Appname) 的子目录中,与凭据的情况一样,手动运行应用程序不会导致连接问题。我已确保证书及其文件夹列出了具有完全控制权的任务所有者。

我还遗漏了什么吗?

答案1

如果你尝试调试在 SYSTEM 安全上下文中运行的失败任务(这是计划任务的默认设置),你应该获取 psexec.exe 的副本然后运行psexec -s cmd.exe。这将使您以 SYSTEM 身份进入交互式 cmd 会话。您可以通过whoami从这个新的命令提示符运行来验证这一点。

尝试从这里运行您的应用程序。您将能够看到它可能写入控制台的任何输出。由于这是一个自定义应用程序,我认为您很难找到明确的答案,因为我们不知道您的代码实际上在做什么。以 SYSTEM 身份获取交互式会话至少会向您显示这是权限问题,还是您在任务计划程序中使用的设置问题。

答案2

事实证明,问题在于配置文件存储在运行应用程序的用户的 AppData\Local 目录中,当时配置设置已更改(我在运行程序时没有使用“自动”参数时添加了此功能)。由于我一直登录自己进行配置,并且不是分配了任务的用户,没有任务用户的 user.config 文件,因此缺少可用的配置数据。对齐任务用户和 user.config 文件的存在可以修复此问题。

相关内容