即使指定了特定帐户,Windows Server 2012 计划任务也会使用默认配置文件运行(当运行会话较少时)

即使指定了特定帐户,Windows Server 2012 计划任务也会使用默认配置文件运行(当运行会话较少时)

正如指出http://social.technet.microsoft.com/Forums/windowsserver/en-US/5e6dc56d-9069-42e3-a7e3-87437cf8ed81/scheduled-tasks-run-in-the-default-user-profile(微软尚未答复)

我遇到了同样的问题。我们以前在 Windows Server 2008R2 中完美运行的计划任务在 Windows Server 2012 中无法执行。此任务的可执行文件取决于用户环境文件夹。

即使任务指定了用户帐户,在未登录服务器的情况下运行时它也会根据默认配置文件执行,因此用户环境文件夹不是正确的文件夹,并且可执行文件会失败。

有人知道如何解决这个问题吗?

答案1

去年,我通过第三方支持公司向微软报告了这个漏洞。他们承认这是一个漏洞,但拒绝在不影响业务的情况下进行修复 - 当时我正在开发中破解某个东西。

在我的研究中,我发现如果您以计划任务设置为以之运行的用户身份运行交互式会话,则会使用正确的配置文件。Microsoft 建议了一种解决方法,即在您实际想要运行的计划任务之前运行 calc.exe(或其他进程)。这似乎对我的情况有效。

我在新的开发中再次遇到了这个错误,因此我要求我们的支持公司再次向微软提出这个问题,并引用这篇文章来表明其他人也遇到了这个问题。

答案2

您可以在执行任务前一两分钟启动另一个交互式任务,这将使 Windows 有时间加载正确的配置文件,或者通过批处理文件启动该任务。

set "USERPROFILE=%USERPROFILE%\..\%USERNAME%"
set "APPDATA=%USERPROFILE%\AppData\Roaming"
set "LOCALAPPDATA=%USERPROFILE%\AppData\Local"
"%~dp0\YOUREXEHERE.exe"

将其复制到批处理文件中,并将其放在与要运行的 exe 相同的目录中。然后将 YOUREXEHERE 更改为 EXE 的名称。不要更改脚本中的任何其他内容并保存。

然后运行批处理作为计划任务,而不是 EXE。无论用户运行该任务,应用程序都会使用他们的配置文件。

答案3

此处似乎有一个修复程序:https://support.microsoft.com/en-us/kb/3133689

但是,由于我需要安排重新启动服务器以应用此修补程序,因此我使用了@brian-d 上面提供的解决方案,并且该解决方案对我有用。

相关内容