Windows中的计划任务要求用户登录这一事实的解决方法

A workaround for the fact that a scheduled task in Windows requires a user to be logged in

我正在运行一个由第三方创建的小型可执行文件,该文件需要在Windows2008服务器上定期运行。这个可执行文件有效地将信息从一个系统传递到另一个系统,并且需要每小时左右运行一次。作为处理过程的一部分,可执行文件启动一个小的Windows窗体类型UI。

我已经设置了一个计划任务来调用该文件,并且只有在配置任务运行的用户登录到计算机(本地或通过远程桌面)时,此操作才有效。如果我将任务设置为以另一个用户的身份运行,或者将任务设置为在用户未登录时运行,则在计划的任务上执行并出现错误。我尝试以不同的用户身份运行,包括管理员用户和系统用户。是否有任何可能的解决方法(不更改我无权访问的第三方代码)允许在没有特定用户登录的情况下运行此代码。


本文展示了如何创建不需要任何登录的任务:https://www.scriptjunkie.us/2013/01/running-code-from-a-non-leighted-account-at-any-time/

所述步骤如下:

First, create a scheduled task to run your command with default options as the current user (this will by default create a scheduled task that only runs when you are logged in):

schtasks /create /tn mytask /SC HOURLY /TR"calc"

Then export the task as XML:

schtasks /query /XML /tn mytask > temp.xml

and delete the task:

schtasks /delete /tn mytask /f

Then open the xml file, and replace the line
InteractiveToken
with
S4U

This can be done with the following commands assuming powershell is on the system:
powershell -Command"Get-Content '.\temp.xml' | foreach {$_ -replace 'InteractiveToken', 'S4U' }"> new.xml
move /y new.xml temp.xml

Now recreate the task from the modified XML file:

schtasks /create /xml temp.xml /tn mytasks

and remove your temp file:

del /f /q temp.xml


图形用户界面应用程序需要一个桌面,而对于一个已登录的用户,您只能得到其中一个桌面。


我可能回答晚了,但是我们不能在没有/interactive的情况下使用at命令吗?

https://support.microsoft.com/en-us/kb/313565

根据Microsoft:/Interactive:使用此参数允许任务与运行任务时登录的用户的桌面交互。


有一个简单的解决方案。将组更改为本地组"用户",系统不会提示您输入密码。(计划任务-常规-安全选项-更改用户或组)。


我想我已经找到了解决这种情况的办法。您需要在服务器上有两个用户帐户(user1和user2)。rmd进入用户1下的服务器。在这个rmd中,创建您的计划任务,并将其设置为在user2帐户下运行。然后,从这个RMD中,您需要使用user2凭证(类似于梦中的盗梦空间)将RMD引入服务器本身。重要的是不要最小化这个新的RMD窗口;您可以使它变小,但它必须是打开的。然后您可以自由关闭原始的RMD会话,任务将在user2帐户下运行,因为user2有一个从第二个RMD会话打开的桌面。

保护-不要松开RMD窗口顶部的RMD窗口手柄-然后关闭正确的RMD可能会很痛苦。如果您这样做了,那么就需要一直使用"开始>注销"选项来退出您的RMD。


从我所做的研究(以及大卫·赫夫南的回答)来看,在不影响源代码的情况下,这是不可能的。

对于如何在上作为服务运行Windows GUI应用程序,有一些有用的想法?这与此相关,但没有一个能为这个问题提供可行的解决方案。


这看起来是一个旧线程,但由于UAC的要求,我最近在我的组织中遇到了这个问题。我仍在测试这一点,但我相信您仍然可以通过对任务使用/Change命令并添加/IT标志使其交互,从而对计划任务启用交互模式。此处引用:https://docs.microsoft.com/en-us/windows/desktop/taskschd/schtasks

1
schtasks /Change /tn"Task A" /IT /RP"password of user if used"

我的初始测试表明这是可行的,但是当我这样做时,我不能明显地看到任务调度程序中的任务有什么不同。所以,我不确定如何验证它是否设置为这样做。